【问题标题】:TFF : ValueError: Shapes (None, 1) and (None,) are incompatibleTFF:ValueError:形状(无,1)和(无,)不兼容
【发布时间】:2021-01-05 12:02:33
【问题描述】:

我使用 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 模式的标签。 我该如何解决这个问题 谢谢

【问题讨论】:

  • 你能打印出样品批次中imageslabels的形状吗?

标签: tensorflow tensorflow2.0 tensorflow-federated


【解决方案1】:

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

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

labels = tf.reshape(labels, shape=[-1, 1])

【讨论】:

  • 非常感谢,我编辑了问题,并在我制作 output_shapes 的地方添加了 tf.data.dataset,那么我必须在哪里以及如何添加您的建议?
  • 这将取决于代码中出现错误的位置。问题是否可以扩展到包括创建和运行训练过程的代码以及错误消息中包含的堆栈跟踪?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 2020-08-27
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多