我使用 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,224,3],[2,1])
这是我的 sample_batch :
images, labels = next(img_gen.flow_from_directory(path0,target_size=(224, 224), batch_size=2, 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 模式的标签。 我该如何解决这个问题 谢谢
答案 0 :(得分:1)
从它的名字来看,在二进制模式下,标签可能是标量 1
或 0
,形状为 [
],而不是张量 [1]
或 { {1}}。 Keras 通常喜欢张量。
也许可以尝试使用 tf.reshape
或 tf.expand_dims
将标量转换为张量。如果 [0]
是形状 labels
,我们想把它变成形状 [batch_size]
:
[batch_size, 1]