繁体   English   中英

Keras 密集输入大小错误,展平返回(无,无)

[英]Keras dense input size error, flatten returns (None, None)

我正在尝试实现此模型以生成 MIDI 音乐,但出现错误

The last dimension of the inputs to `Dense` should be defined. Found `None`.

这是我的代码

model = Sequential()
model.add(Bidirectional(LSTM(512, return_sequences=True), input_shape=(network_input.shape[1], network_input.shape[2])))
model.add(SeqSelfAttention(attention_activation='sigmoid'))
model.add(Dropout(0.3))
model.add( LSTM(512, return_sequences=True))
model.add(Dropout(0.3))
model.add(Flatten())
model.summary()
model.add(Dense(note_variants_count))
model.compile(loss='categorical_crossentropy', optimizer='adam')

这是密集层之前的总结


Model: "sequential_17"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
bidirectional_19 (Bidirectio (None, 100, 1024)         2105344   
_________________________________________________________________
seq_self_attention_20 (SeqSe (None, None, 1024)        65601     
_________________________________________________________________
dropout_38 (Dropout)         (None, None, 1024)        0         
_________________________________________________________________
lstm_40 (LSTM)               (None, None, 512)         3147776   
_________________________________________________________________
dropout_39 (Dropout)         (None, None, 512)         0         
_________________________________________________________________
flatten_14 (Flatten)         (None, None)              0         
=================================================================
Total params: 5,318,721
Trainable params: 5,318,721
Non-trainable params: 0
_________________________________________________________________

我认为 Flatten 层导致了问题,但我不知道为什么它返回 (None, None) 形状。

您必须为 Flatten 层提供除批次维度之外的所有维度。

使用 RNN 和“return_sequence”

对于像 LSTM 这样的 RNN,可以选择返回整个序列或仅返回结果。 在这种情况下,您只需要结果。 只改变这一行

model.add(Dropout(0.3))
model.add(LSTM(512, return_sequences=False)) # <== change to False
model.add(Dropout(0.3))
model.add(Flatten())
model.summary()

从摘要中返回以下网络形状

_________________________________________________________________
lstm_4 (LSTM)                (None, 512)               3147776   
_________________________________________________________________
dropout_3 (Dropout)          (None, 512)               0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 512)               0         
=================================================================

注意输出张量的秩从 Rank 3 降低到 Rank 2。这是因为这个输出只是那个输出,而不是考虑到所有隐藏状态的整个序列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM