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

Nik*_*las 3 python machine-learning keras tensorflow

我正在努力解决 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)
Run Code Online (Sandbox Code Playgroud)

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

Far*_*ian 5

您的代码有很多问题。

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)
Run Code Online (Sandbox Code Playgroud)