Keras LSTM 层 ValueError:尺寸必须相等,但分别为 17 和 2

时间:2021-02-24 19:37:18

标签: python-3.x tensorflow keras tensorflow2.0 keras-layer

我正在为多类任务开发一个基本的 RNN 模型,但我在输出维度方面遇到了一些问题。

这是我的输入/输出形状:

input.shape = (50000, 2, 5) # (samples, features, feature_len)
output.shape = (50000, 17, 185) # (samples, features, feature_len) <-- one hot encoded 

input[0].shape =  (2, 5)
output[0].shape = (17, 185)

这是我的模型,使用 Keras 函数式 API:

inp = tf.keras.Input(shape=(2, 5,))

x = tf.keras.layers.LSTM(128, input_shape=(2, 5,), return_sequences=True, activation='relu')(inp)
out = tf.keras.layers.Dense(185, activation='softmax')(x)

model = tf.keras.models.Model(inputs=inp, outputs=out)

这是我的model.summary()

Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         [(None, 2, 5)]            0
_________________________________________________________________
lstm (LSTM)                  (None, 2, 128)            68608
_________________________________________________________________
dense (Dense)                (None, 2, 185)            23865
=================================================================
Total params: 92,473
Trainable params: 92,473
Non-trainable params: 0
_________________________________________________________________

然后我编译模型并运行fit()

model.compile(optimizer='adam',
              loss=tf.nn.softmax_cross_entropy_with_logits,
              metrics='accuracy')

model.fit(x=input, y=output, epochs=5)

而且我收到了尺寸错误:

ValueError: Dimensions must be equal, but are 17 and 2 for '{{node Equal}} = Equal[T=DT_INT64, incompatible_shape_error=true](ArgMax, ArgMax_1)' with input shapes: [?,17], [?,2].

错误很明显,模型输出了一个维度2,而我的输出维度是17,虽然我明白这个问题,但我找不到解决它的方法,有什么想法吗?< /p>

2 个答案:

答案 0 :(得分:-1)

我认为你的输出形状不是“output[0].shape = (17, 185)”而是“dense (Dense) (None, 2, 185)”。

您需要更改输出形状或更改图层结构。

答案 1 :(得分:-1)

LSTM 输出是 encoder_outputs 的列表,当您指定 return_sequences=True 时。因此;我建议只使用 encoder_outputs 的最后一项作为 Dense 层的输入。您可以查看此链接的示例部分,指向 documentation。或许能帮到你。