我正在努力使用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)您希望出现回归问题 . 在最后一层,softmax将数字压缩到0和1的范围 . 您需要线性激活 .
2)因此,损失函数应为
mean_square_error
.3)目标
y
的形状决定了每个时间步的输出层大小应为1而不是10 .4)LSTM层的输入和输出数组的形状应为(batch_size,time_step,dim) .
5)LSTM层中定义的时间步长和输入数据的时间步长应相同 .
我在您的代码中包含了这些更改: