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

3

我在处理LSTM的输入形状方面遇到了困难。 这里我制作了一个简单的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吗? 顺祝商祺。尼克拉斯


请使用适当的标题... - luk32
我把它改成了一个合适的标题。 - Niklas
1个回答

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)

非常感谢 :) 现在我明白了! 我的代码只是我的问题的一个例子,因为我的主要代码太丑了。 - Niklas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接