首页 文章

ValueError:检查输入时出错:期望lstm_1_input有3个维度,但得到的形状为数组(10,1)

提问于
浏览
0

我正在努力使用LSTM input_shape . 在这里,我制作了一个应该训练的简单LSTM网络,以使输入加倍 .

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np

X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = np.array([2, 4, 6, 8, 10, 12, 14, 16, 18, 20])

data_dim = 1
timesteps = 8

model = Sequential()
model.add(LSTM(32, return_sequences=True, input_shape=(timesteps, data_dim)))
model.add(LSTM(32, return_sequences=True))
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

model.fit(X,y, batch_size=10, epochs=1000)

但总会出现以下错误消息:ValueError:检查输入时出错:期望lstm_1_input有3个维度,但得到的数组有形状(10,1)我做错了什么?有人可以解释我input_shape的事情 . 亲切的问候 . 尼克拉斯

1 回答

  • 1

    您的代码有很多问题 .

    1)您希望出现回归问题 . 在最后一层,softmax将数字压缩到0和1的范围 . 您需要线性激活 .

    2)因此,损失函数应为 mean_square_error .

    3)目标 y 的形状决定了每个时间步的输出层大小应为1而不是10 .

    4)LSTM层的输入和输出数组的形状应为(batch_size,time_step,dim) .

    5)LSTM层中定义的时间步长和输入数据的时间步长应相同 .

    我在您的代码中包含了这些更改:

    from keras.models import Sequential
    from keras.layers import LSTM, Dense
    import numpy as np
    
    X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    y = np.array([2, 4, 6, 8, 10, 12, 14, 16, 18, 20])
    
    X = X.reshape(1,10,1)
    y = y.reshape(1,10,1)
    
    data_dim = 1
    timesteps = 10
    
    model = Sequential()
    model.add(LSTM(32, return_sequences=True, input_shape=(timesteps, data_dim)))
    model.add(LSTM(32, return_sequences=True))
    model.add(Dense(1, activation='linear'))
    
    print(model.summary())
    
    model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['accuracy'])
    
    model.fit(X,y, batch_size=1, epochs=1000)
    

相关问题