InvalidArgumentError :输入深度必须被过滤器深度整除:4 vs 3

51s*_*sep 9 python error-handling image-comparison tensorflow

我是初学者。我尝试了 Tensorflow 的图像分类,并得到以下错误。我在网上发现了类似的问题,但我无法理解。错误是什么意思?我该怎么办?请给我一些建议。我使用 100 个文件(png/15pix、15pix)作为示例图像。Tensorflow ver.2.0.0 / python ver.3.8.1 / Jupyter notebook。

示例图像

    num_epochs = 30
    steps_per_epoch = round(num_train)//BATCH_SIZE
    val_steps = 20
    history = model.fit(train_data.repeat(),
                epochs=num_epochs,
                steps_per_epoch = steps_per_epoch,
                validation_data=val_data.repeat(), 
                validation_steps=val_steps)
Run Code Online (Sandbox Code Playgroud)

InvalidArgumentError:输入深度必须被过滤器深度整除:4 vs 3 [[节点序列_2/mobilenetv2_1.00_96/Conv1/Conv2D(定义在C:\Users\XXXXX\Anaconda3\lib\site-packages\tensorflow_core\python\framework \ops.py:1751) ]] [Op:__inference_distributed_function_42611] 函数调用堆栈:distributed_function

小智 7

我认为您阅读了 4 通道格式的图像。您应该在转发之前将输入图像转换为“RGB”。


小智 6

如果您的模型如下所示:

model = tf.keras.Sequential([
tf.keras.layers.Conv2D(16, (3, 3), activation = 'relu', input_shape = (150, 150, 3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(32, (3, 3), activation = 'relu'),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation = 'relu'),
tf.keras.layers.Dense(10, activation = 'softmax')
])
Run Code Online (Sandbox Code Playgroud)

input_shape(在第一个卷积层)的值从(150, 150, 3)更改为(150, 150, 4)

仅将元组中的最后一项(此处为 3)替换为 4。这样就可以了。


51s*_*sep 5

我找到了答案!就我而言,以下程序有所帮​​助。

XXX = tf.convert_to_tensor(XXX[:,:,:3])
Run Code Online (Sandbox Code Playgroud)

我希望它也能帮助你。谢谢。


jpb*_*647 5

我遇到这个错误是因为我使用已转换为灰度的图像作为我的数据。如果有人这样做,您可以从灰度转换为颜色格式,或者重新准备数据而不转换为灰度,这就是我所做的。

\n

根据我找到的解决方案:\n“也许您正在尝试将灰度图像输入需要彩色图像的 CNN。查找输入的形状,例如 Keras 中的 print(model.input.shape),您会得到例如 (None, 224 , 224, 3) 并且您的输入 blob 必须具有相应的形状,因此拥有灰度图像,您必须将其转换为(正式)彩色图像(所有三个通道都相同)。但是,不要忘记您需要还知道输入 blob 的更多方面 - 均值、范围、偏差、\xe2\x80\xa6 具有良好的形状,它会计算一些内容,但不考虑这些方面,计算结果不好”

\n