python - 检查输入时出错:预期 lstm_29_input 的形状为 (None, None, 2) 但得到的数组的形状为 (51, 1, 10)
问题描述
我的代码如下:
tfidf_matrix=dataset[:0,10]
model = Sequential()
input_shape = tfidf_matrix.shape
model.add(LSTM(32, input_dim=2, return_sequences=True, input_shape=input_shape))
model.add(LSTM(64, input_dim=2, input_shape=input_shape, return_sequences=True))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop')
model.fit(X_train, Y_train, batch_size=20, nb_epoch=11)
score = model.evaluate(X_test, Y_test, batch_size=20)
我的数据集片段如下(用于二进制分类):
197.2468966,210.0796552,0.579310345,899.0698276,721.1689655,95.52396817,90.59689707,2.620225801,80.53794681,152.6919308,0
200.7320616,213.6853999,0.653851798,856.1059428,841.3118122,97.48691388,92.08916212,2.753934571,100.4151651,161.5956683,1
225.5475209,250.124516,0.735856126,878.6098414,924.2562758,110.4606583,101.748855,2.885445826,77.50833011,109.0694556,0
我不断收到类似这样的错误:"Error when checking input: expected lstm_9_input to have 3 dimensions, but got array with shape (51, 10)" in model.fit()
请帮助
解决方案
首先,你应该只input_shape
在模型的第一层使用参数。其余层将自动计算其输入形状。
其次,你应该只在你的第一个 LSTM 层中input_dim
使用一个参数。input_shape
参数input_dim
指定序列的每个时间步有多少维度,而input_shape
指定序列长度和维度。您不应该在输入形状中包含批量大小。因此,如果您的训练数据是 形状(batch_size, seq_length, dim)
,那么您的第一层的输入形状应该是(seq_length, dim)
。
在您的情况下,您的数据看起来有 10 个时间步长且只有 1 个维度(即每个时间步长一个数字)。所以,你的训练数据应该有形状(batch_size, 10, 1)
,你input_shape
的第一层应该是(10, 1)
.
推荐阅读
- javascript - 快速呼叫中的异步等待
- mysql - 从列中的每一行中提取第二个单词
- android - 在 7.0 及更高版本中杀死应用程序时重新启动服务
- python - python中隐藏马尔可夫模型的石榴
- python - 了解 Python 多处理文档
- objective-c - 为什么 CLGeocoder 在调用时会崩溃
- hyperledger-fabric - 错误:等待通道创建超时——使用 Fabric 的 Kafka Orderer
- java - 运行时异常:“存根!” 没有任何其他信息
- database-design - 图数据库中的层次结构属性
- javascript - 如果我想在 ajax 调用中创建 json 数组,为什么冒号 (:) 是非法字符?