背景
我对 Python 和机器学习完全陌生。我只是尝试根据在互联网上找到的代码建立一个 UNet,并希望将其适应我正在处理的情况。当尝试使用.fitUNet 来训练数据时,我收到以下错误:
InvalidArgumentError: required broadcastable shapes at loc(unknown)
[[node Equal (defined at <ipython-input-68-f1422c6f17bb>:1) ]] [Op:__inference_train_function_3847]
Run Code Online (Sandbox Code Playgroud)
当我搜索它时,我得到了很多结果,但大多数都是不同的错误。
这是什么意思?更重要的是,我该如何解决这个问题?
导致错误的代码
该错误的上下文如下:我想分割图像并标记不同的类。我为训练、测试和验证数据设置了目录“trn”、“tst”和“val”。该dir_dat()函数适用于获取相应数据集os.path.join()的完整路径。这 3 个文件夹中的每一个都有每个类的子目录,并用整数标记。在每个文件夹中,都有一些相应类别的图像。.tif
我定义了以下图像数据生成器(训练数据稀疏,因此增强):
classes = np.array([ 0, 2, 4, 6, 8, 11, 16, 21, 29, 30, 38, 39, 51])
bs = 15 # batch size
augGen = ks.preprocessing.image.ImageDataGenerator(rotation_range = 365,
width_shift_range = 0.05,
height_shift_range = 0.05,
horizontal_flip = True,
vertical_flip = True,
fill_mode = "nearest") \
.flow_from_directory(directory = dir_dat("trn"), …Run Code Online (Sandbox Code Playgroud) python neural-network conv-neural-network tensorflow tf.keras
我只是想为我的第一个 CNN 设置学习率计划,我发现有多种方法可以实现:
tf.keras.callbacks.LearningRateScheduler()tf.keras.optimizers.schedules.LearningRateSchedule()现在我想知道是否有任何差异,如果有,它们是什么?如果没有什么区别,为什么还要存在这些替代方案呢?有历史原因吗(应该首选哪种方法)?
有人可以详细说明吗?
当我尝试加载经过训练的tf.keras模型时,出现错误:JSONDecodeError: Expecting value。该问题不可重现,即,当我尝试加载在集群上训练并下载到计算机上的模型时,出现错误。当我尝试编译、保存和加载同一模型时,错误并未出现。
有什么想法可能是什么问题吗?
以下代码有效(与加载经过训练的模型相反):
import tensorflow as tf
from tensorflow import keras as ks
import numpy as np
import os
def UNet(n_classes, input_shape = (256, 256, 3), dropout = 0.05,
ops = {"activation" : "relu",
"padding" : "same",
"kernel_initializer" : "he_normal"
}):
# input layer
inputz = ks.layers.Input(shape = input_shape)
# encoder part
## 1st convolution
c1 = ks.layers.Conv2D(64, (3, 3), **ops)(inputz)
c1 = ks.layers.Conv2D(64, (3, 3), **ops)(c1)
## 1st max pooling
p1 …Run Code Online (Sandbox Code Playgroud)