Python &引用;ValueError:输入到“的形状”;“展平”;“未完全定义”;具有可变长度的LSTM

Python &引用;ValueError:输入到“的形状”;“展平”;“未完全定义”;具有可变长度的LSTM,python,keras,lstm,text-classification,variable-length,Python,Keras,Lstm,Text Classification,Variable Length,这是我的密码: from keras.layers import LSTM, Bidirectional, Dense, Input, Flatten from keras.models import Model input = Input(shape=(None, 100)) lstm_out = Bidirectional(LSTM(10, return_sequences=True))(input) something = Flatten()(ls

这是我的密码:

    from keras.layers import LSTM, Bidirectional, Dense, Input, Flatten
    from keras.models import Model

    input = Input(shape=(None, 100))
    lstm_out = Bidirectional(LSTM(10, return_sequences=True))(input)
    something = Flatten()(lstm_out)
    output = Dense(22, activation='softmax')(something)

    model = Model(inputs=input, outputs=output)
    model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])
我正在构建一个LSTM,通过 . 但是现在我的模型说的是
ValueError:Flatten输入的形状没有完全定义(get(None,20)
。我如何解决这个问题

提前感谢

您无法解决此特定问题,因为您可以将一个可变大小的向量传递给一个
密集的
层。为什么?因为它有一个固定大小的权重矩阵,即内核
W

相反,您应该查看可以处理可变长度序列(如RNN)的层。例如,您可以让LSTM学习整个序列的表示:

input = Input(shape=(None, 100))
lstm_out = Bidirectional(LSTM(10))(input) # the LSTM produces a single fixed size vector
output = Dense(22, activation='softmax')(lstm_out) # Dense classifies it
如果您想在模型中增加容量,可以链接RNN层,只要最后一层不返回序列:

lstm_out = Bidirectional(LSTM(10, return_sequences=True))(input)
lstm_out = Bidirectional(LSTM(10))(lstm_out) # this LSTM produces a single vector

如果在图形创建时时间步数未知,则无法应用
展平
——最后一个
密集
层有多少输入单位?