获取input_shape参数 LSTM 的形状

getting the shape for the input_shape parameter LSTM

提问人:user13919384 提问时间:8/21/2020 更新时间:8/21/2020 访问量:100

问:

有没有办法在 LSTM 中自动获取 input_shape 参数的形状,然后将该形状设置为input_shape参数。 我希望能够让递归神经网络根据数据的形状自动设置输入形状。 谢谢。

    dataset_train = pd.read_csv(dataset_path)
    
    training_set = dataset_train.iloc[:, :].values

    from sklearn.preprocessing import MinMaxScaler
    sc = MinMaxScaler(feature_range=(0, 1))
    training_set_scaled = sc.fit_transform(x)

    
    print(len(training_set_scaled))
    print(len(dataset_train))

    X_train = []
    y_train = []
    for i in range(past_days, len(training_set_scaled) - future_days + 1):
        X_train.append(training_set_scaled[i - past_days:i, 0])
        y_train.append(training_set_scaled[i + future_days - 1:i + future_days, 0])
    X_train, y_train = np.array(X_train), np.array(y_train)

    
    ## Building and Training the RNN

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

    ### Initialising the RNN


    regressor = Sequential()

    ### Adding the first LSTM layer and some Dropout regularisation

    regressor.add(LSTM(units=50, input_shape= (?) , return_sequences=True))
    regressor.add(Dropout(0.2))

    ### Adding a second LSTM layer and some Dropout regularisation

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

    ### Adding a third LSTM layer and some Dropout regularisation

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

    ### Adding a fourth LSTM layer and some Dropout regularisation

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

    ### Adding the output layer

    regressor.add(Dense(units=1))

    ### Compiling the RNN

    regressor.compile(optimizer='adam', loss='mean_squared_error')
Python 机器学习 Keras 深度学习 循环神经网络

评论


答:

0赞 Zain Sarwar 8/21/2020 #1

如果您知道要训练/测试模型的数据,这应该不是一个挑战。您只需从数据集中选择一个数据点即可。如果你的数据在 NumPy/Tensor/Pandas 中,你可以使用 .您不必担心批量大小,这是 Keras 会自动选择的。x.shape()

0赞 Nicolas Gervais 8/21/2020 #2

我一般使用.也就是说,假设你的输入形状是正确的,并且可以通过神经网络。input_shape=X_train.shape[1:]

评论

0赞 user13919384 8/21/2020
我收到以下错误:str(x.shape.as_list())) ValueError:层 lstm 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:[无,0]
0赞 Nicolas Gervais 8/21/2020
所以你输入的形状是0?就像我说的,只有当你有正确的输入形状时,这才有效
0赞 Nicolas Gervais 8/21/2020
你的输入形状是什么?
0赞 Nicolas Gervais 8/21/2020
这是你的问题。您还没有准备好自动推断形状,因为您的输入是错误的
0赞 Nicolas Gervais 8/21/2020
同样,您的输入是错误的。不管你放什么都会抛出错误input_shape