【问题标题】:Keras ValueError: logits and labels must have the same shape ((None, 32, 17) vs (None, 17))Keras ValueError:logits 和标签必须具有相同的形状 ((None, 32, 17) vs (None, 17))
【发布时间】:2020-10-23 00:42:07
【问题描述】:

我正在训练一个多标签分类器(IAM 数据集上的手写数字识别器)。

这是我所有的分裂的形状:

>>> X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape,  Y_test.shape
((86583, 32, 128, 1),
 (4558, 32, 128, 1),
 (4797, 32, 128, 1),
 (86583, 17),
 (4558, 17),
 (4797, 17))

以下是目标变量的 5 个示例:

>>> Y_val[5:10]
array([[68, 59,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
         0],
       [28, 67, 57,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
         0],
       [42, 59, 59, 62, 56, 58,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
         0],
       [73, 61, 58,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
         0],
       [73, 61, 54, 73,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
         0]], dtype=int32)

(在上面的数组中,每个数字对应于字符和字母列表中的索引。并且所有目标向量都填充了零以匹配最大目标词的大小。)

我在输出层使用 'sigmoid' 激活,有 17 个单元,每个单元用于一个可能的输出字符/字母,如下所示。

from tensorflow.keras import layers
     .
     .
layers.Dense(units=17, activation='sigmoid', kernel_initializer='he_uniform', kernel_regularizer='l2')

对于我的多标签分类问题,将“binary_crossentropy”作为损失。

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['categorical_accuracy'])

这是我的错误:

编辑 1:
我的模型架构:

【问题讨论】:

  • 你的错误很可能来自你的模型的另一部分,你能完整显示出来吗?
  • 你想看看我的模型的架构吗?
  • 是的,请解析
  • 我已经添加了。
  • 看代码会更简单,但是问题出在你的第二个LSTM层,你有没有设置return_sequences=True

标签: python tensorflow keras tf.keras


【解决方案1】:

从你的第二个 LSTM 层中删除 return_sequences=True 就可以了

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 2021-03-23
    • 2020-09-30
    • 2021-07-27
    • 2021-10-28
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多