【问题标题】:RNN LSTM valueError while training训练时RNN LSTM值错误
【发布时间】:2021-08-16 01:17:27
【问题描述】:

嗨,最近我一直在做一个 RNN LSTM 项目,我有一个像这样的二维数据集

x = [[x1,x2,x3...,x18],[x1,x2,x3...,x18],...]
y = [[y1,y2,y3],[y1,y2,y3],...]

X.shape => (295,5,18)
Y.shape => (295,3)

我通过下面的代码将其转换为 3D 数据集

X_train = []
Y_train = []

for i in range(5,300):
    X_train.append(training_set_scaled[i-5:i,0:18])
    Y_train.append(training_set_scaled[i,18:22])
    
X_train, Y_train = np.array(X_train), np.array(Y_train)

然后将 Keras 用于 LSTM

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout

regressor = Sequential()

regressor.add(LSTM(units=50, return_sequences=True,input_shape=(X_train.shape[0],X_train.shape[1],X_train.shape[2])))
regressor.add(Dropout(0.1))

regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.1))

regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.1))

regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.1))

regressor.add(LSTM(units=50))
regressor.add(Dropout(0.1))


regressor.add(Dense(units= 1))

regressor.compile(optimizer= 'adam', loss='binary_crossentropy')

regressor.fit(X_train,Y_train, epochs = 100, batch_size = 32)

当我运行此脚本时,出现以下错误:

ValueError: Input 0 is incompatible with layer lstm_104: expected ndim=3, found ndim=4

我不知道有任何机构可以帮助我吗?

【问题讨论】:

    标签: python numpy keras deep-learning lstm


    【解决方案1】:

    变化:

    input_shape=(X_train.shape[0],X_train.shape[1],X_train.shape[2])
    

    到

    input_shape=(X_train.shape[1],X_train.shape[2])
    

    基本上keras 设计用于在一个批次中获取任意数量的示例,因此它会自动将None 作为第一个参数。所以,当你提到剩下的 2 个维度时,它总共得到一个 3 维度输入,但如果你自己提到第一个维度,维度的数量变为 4,即 (None, X_train.shape[0],X_train.shape[1],X_train.shape[2])。

    但同样,如果您真的想对 batch_size 进行硬编码,您仍然可以这样做。为此,您必须使用batch_input_shape 而不是input_shape,如下所示:

    regressor.add(LSTM(units=50, return_sequences=True, batch_input_shape=(X_train.shape[0], X_train.shape[1], X_train.shape[2])))
    

    它将使您能够控制为网络设置的特定批量大小。 (在这种情况下,您的程序还有另一个缺陷,您正在设置批量大小 X_train.shape[0],即 295,但您在 fit() 中发送 32,但它们应该相等。批量大小通常也较小大于数据集大小)。

    【讨论】:

    • 非常感谢!这对我有用。我想再问一个问题:你更喜欢什么来开始和理解 Keras? Keras 文档是否足够好?你会建议它的任何特定部分吗?此外,您会推荐任何类型的教程或手册吗?
    • @radinvafaei 好吧,keras 现在与tensorflow 合并。文档 (tensorflow.org/api_docs/python/tf/keras) 很好。但如果文档似乎不够清晰,我建议您也访问相应的github 存储库。这将帮助您深入了解幕后发生的事情,并消除许多困惑。
    • @radinvafaei 如果您想了解更多关于keras 的信息,我建议您这样做:coursera.org/specializations/tensorflow2-deeplearning#courses 课程。这是我在这个主题上找到的最好的课程之一。我自己也从中学到了很多。
    • @radinvafaei 现在谈论书。如果您想了解更多关于machin learning 和deep learning 的信息,可以阅读这本书(oreilly.com/library/view/hands-on-machine-learning/…),它是我读过的关于这个主题的最好的书之一。你会喜欢的。
    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2018-06-15
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多