首页 > 解决方案 > 层 lstm_11 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=4。收到的完整形状:[None, 5000, 1, 6]

问题描述

我正在使用 Keras 开发比特币价格预测器。我从binance.com获得数据。数据结构是这样的,它是 5,000 小时:

[ ['1597773600000' '11983.22000000' '12010.95000000' '11948.40000000' '11978.18000000' '2344.24787500'] ['1597777200000' '11978.19000000' '12029.00000000' '11964.63000000' '11982.00000000' '1993.81400900'] ['1597780800000' '11981.99000000' '12037.86000000 ' '11978.07000000' '12022.99000000' '2092.06777400'] ... ['1586962800000' '6717.66000000' '6745.51000000' '6690.00000000' '6701.90000000' '3279.59274200'] ['1586966400000' '6701.90000000' '6749.69000000' '6690.00000000' '6729.58000000' '2511.60203300'] ['1586970000000' '6729.59000000' '6763.13000000' '6724.51000000' '6746.86000000''1660.33553000']]

形状= (5000, 6) 尺寸= 30000 ndim= 2

在每个条目中,第一个元素是时间戳。我需要将其重塑为(样本、时间戳、功能)。我是这样做的:

btcData = np.reshape(btcData,(5000, 1, 6))

然后我标准化数据并建立模型。型号在这里:

myModel = keras.Sequential(name='cryptoPredictor')
myModel.add(keras.Input(np.shape(train_data),))
myModel.summary()
myModel.add(LSTM(128, activation='tanh'))
myModel.summary()
myModel.add(LSTM(128, activation='tanh'))
myModel.summary()
myModel.add(Dense(1))
myModel.summary()
myModel.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
myModel.fit(train_data, test_data, batch_size=100, epochs=50, validation_split=15.0)

当我运行模型时,我收到此错误:

层 lstm_11 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=4。收到的完整形状:[None, 5000, 1, 6]

我能做些什么来解决这个错误?

标签: pythontensorflowkerasneural-networklstm

解决方案


您可能希望将数据重塑为形状,(5000,6)因为 lstm 所需的第一个维度是 batch_size,然后是 timestep,然后是 sample。特征和批量大小在这里可以看作是同义词:

btcData = np.reshape(btcData,(5000,6))

推荐阅读