TFF : ValueError: Shapes (None, 1) 和 (None,) 不兼容

问题描述

我使用 TFF 并且我的数据集有一个 binary_mode 类,这就是我声明输入的方式:

genv0 = img_genv.flow_from_directory(pathv0,(224,224),'rgb',batch_size=2,class_mode='binary')
train_data = tf.data.Dataset.from_generator(genv0,output_types=(tf.float32,tf.float32),output_shapes = ([2,224,3],[2,1])

这是我的 sample_batch :

images,labels = next(img_gen.flow_from_directory(path0,target_size=(224,class_mode='binary'))

然后我在我的模型中添加这个层

model_output = tf.keras.layers.Dense(1,activation="sigmoid")(last_layer)
 model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.001)
             loss=tf.keras.losses.BinaryCrossentropy(),metrics=([tf.keras.metrics.BinaryAccuracy()))

运行我的代码时,我发现这个错误

 ValueError: Shapes (None,1) and (None,) are incompatible

我认为问题在于 sample_batch 不带 bainary 模式的标签。 我该如何解决这个问题 谢谢

解决方法

从它的名字来看,在二进制模式下,标签可能是标量 10,形状为 [],而不是张量 [1] 或 { {1}}。 Keras 通常喜欢张量。

也许可以尝试使用 tf.reshapetf.expand_dims 将标量转换为张量。如果 [0] 是形状 labels,我们想把它变成形状 [batch_size]

[batch_size,1]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...