keras中LSTM的形状失配

2024-04-25 17:50:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在我的自定义功能集上使用Keras运行LSTM。我在不同的文件中有训练和测试功能。每个csv文件包含11列,最后一列作为类标签。我的数据集中总共有40个类。问题是我无法找出第一层的正确输入形状。我已经研究了stackoverflow和github,但仍然无法解决这个问题 下面是我的完整代码。在

import numpy
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM

numpy.random.seed(7)

train_dataset = numpy.loadtxt("train.csv", delimiter=",")
X_train = train_dataset[:, 0:10]
y_train = train_dataset[:, 10]

test_dataset = numpy.loadtxt("test.csv", delimiter=",")
X_test = test_dataset[:, 0:10]
y_test = test_dataset[:, 10]

model = Sequential()

model.add(LSTM(32, return_sequences=True, input_shape=X_train.shape))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(32))
model.add(Dense(1, activation='softmax'))
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=10, epochs=1)

score, acc = model.evaluate(X_test, y_test, batch_size=10)
print('Test score:', score)
print('Test accuracy:', acc * 100)

无论输入形状参数有什么变化,在拟合方法的第一层LSTM中都会出现错误。在


Tags: 文件csvfromtestimportnumpyaddmodel
1条回答
网友
1楼 · 发布于 2024-04-25 17:50:50

你的输入中没有时间维度。 RNN的输入应该是(batch_size, time_step, features),而您的输入的维度是(batch_size, features)。在

如果你想一次使用10列,你应该用 numpy.reshape(train_dataset, (-1, train_dataset.shape[1], 1))

请尝试以下代码:

train_dataset = numpy.loadtxt("train.csv", delimiter=",")
train_dataset = numpy.reshape(train_dataset, (-1, train_dataset.shape[1], 1))

X_train = train_dataset[:, 0:10]
y_train = train_dataset[:, 10]

test_dataset = numpy.loadtxt("test.csv", delimiter=",")
test_dataset = numpy.reshape(test_dataset, (-1, train_dataset.shape[1], 1))

X_test = test_dataset[:, 0:10]
y_test = test_dataset[:, 10]

model = Sequential()

model.add(LSTM(32, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(32))
model.add(Dense(1, activation='softmax'))
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=10, epochs=1)

score, acc = model.evaluate(X_test, y_test, batch_size=10)
print('Test score:', score)
print('Test accuracy:', acc * 100)

相关问题 更多 >