如何解决lstm_11层的输入0与该层不兼容:预期ndim = 3,找到的ndim = 4收到完整的图形:[无,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。全形 收到:[无,5000、1、6]
我该怎么办才能解决此错误?
解决方法
您可能希望将数据重塑为(5000,6)
的形状,因为lstm所需的第一个维度是batch_size,然后是时间步长,然后是样本。
功能和批量大小可以在此处视为同义词:
btcData = np.reshape(btcData,(5000,6))
,
假设您有5,000行,其中包含1个时间步长和6个功能,则必须更改此设置:
- 将输入形状设置为
(1,6)
- 为第二层设置
return_sequences=True
然后它起作用了
from tensorflow import keras
from tensorflow.keras.layers import *
import numpy as np
X = np.random.rand(5000,1,6)
y = np.random.rand(5000)
myModel = keras.Sequential(name='cryptoPredictor')
myModel.add(keras.Input(shape=np.shape(X)[1:]))
myModel.summary()
myModel.add(LSTM(8,activation='tanh',return_sequences=True))
myModel.summary()
myModel.add(LSTM(8,activation='tanh'))
myModel.summary()
myModel.add(Dense(1))
myModel.summary()
myModel.compile(optimizer='rmsprop',loss='mse',metrics=['mae'])
history = myModel.fit(X,y,batch_size=8,epochs=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。