tensorflow 无效参数错误:输入深度必须能被滤波器深度整除:4对3

k75qkfdt  于 2022-11-16  发布在  其他
关注(0)|答案(7)|浏览(223)

我是一个初学者。我尝试了Tensorflow的图像分类,并得到了以下错误。我在网上发现了类似的问题,但我不明白。错误是什么意思?我应该怎么做?请给予我一些建议。我使用100个文件(png/15 pix,15 pix)作为样本图像。Tensorflow ver.2.0.0 / python ver.3.8.1 / Jupyter笔记本。

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)

无效参数错误:输入深度必须能被滤波器深度整除:函数调用堆栈:分布式函数

cgyqldqp

cgyqldqp1#

如果模型如下所示:

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')
])

input_shape的值(在第一卷积层)从(150, 150, 3)更改为(150, 150, 4)
只将元组中的最后一个项(这里是3)替换为4,这样应该可以工作。

gwbalxhn

gwbalxhn2#

我想你读是一个4通道格式的图像。你应该在转发之前将输入图像转换为“RGB”。

nfs0ujit

nfs0ujit3#

我找到了答案!在我的情况下,下面的程序帮助它。

XXX = tf.convert_to_tensor(XXX[:,:,:3])

我也希望能帮到你谢谢。

hwamh0ep

hwamh0ep4#

我遇到这个错误是因为我使用已转换成灰阶的影像做为我的数据。如果有人正在执行这个动作,您可以从灰阶转换成彩色格式,或重新准备您的数据而不转换成灰阶,这就是我所做的。
根据我找到的解决方案:“也许您正尝试将灰度图像输入CNN,而CNN需要彩色图像。查找输入的形状,例如打印(模型.输入.形状)在Keras中,您可以得到例如(无、224、224、3),并且您的输入斑点必须具有相应的形状,因此,如果您拥有灰度图像,则必须将其转换为(正式)彩色图像(所有三个通道将是相同的)。然而,不要忘记,你还需要知道输入斑点的进一步方面-平均值,范围,偏差,...有一个很好的形状,它计算的东西,但不考虑这些方面,计算结果不好”

mzsu5hc0

mzsu5hc05#

该错误是由于提供的输入的维度不匹配。模型要求输入的深度为“3”,但给定的深度为“4”。

xwmevbvl

xwmevbvl6#

如果出现1 vs 3错误,则是因为输入图像具有Grayscale模式。
我用的是这个代码:

train_generator = train_datagen.flow_from_directory(f'{dataset}/train', target_size=(150,150),batch_size=32,color_mode='grayscale',class_mode="categorical")

为了解决该错误,我将模式更改为rgb

train_generator = train_datagen.flow_from_directory(f'{dataset}/train', target_size=(150,150),batch_size=32,color_mode='rgb',class_mode="categorical")
mrphzbgm

mrphzbgm7#

另一件需要检查的事情是维度在输入中的定义顺序。如果你在错误信息中得到类似3 vs 256的信息,你的图像可能是作为(3, 256, 256)数组加载的,但是你的输入应该是(256, 256, 3)

相关问题