我正在为多类任务开发一个基本的 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>
答案 0 :(得分:-1)
我认为你的输出形状不是“output[0].shape = (17, 185)”而是“dense (Dense) (None, 2, 185)”。
您需要更改输出形状或更改图层结构。
答案 1 :(得分:-1)
LSTM 输出是 encoder_outputs
的列表,当您指定 return_sequences=True
时。因此;我建议只使用 encoder_outputs
的最后一项作为 Dense 层的输入。您可以查看此链接的示例部分,指向 documentation。或许能帮到你。