Несоответствие формы в LSTM в keras

Я пытаюсь запустить LSTM, используя Keras в своем наборе пользовательских функций. У меня есть функции обучения и тестирования в отдельных файлах. Каждый файл csv содержит 11 столбцов, последний из которых является меткой класса. В моем наборе данных всего 40 классов. Проблема в том, что я не могу определить правильный input_shape для первого слоя. Я изучил весь 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)

Что бы я ни изменил в параметре input_shape, я получаю ошибку в первом слое LSTM метода in fit.


person Khurram Shehzad    schedule 27.08.2017    source источник


Ответы (1)


у вас нет измерения времени в вашем вводе. Входные данные для 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)
person Muller20    schedule 27.08.2017
comment
Извините, я не могу получить его. - person Khurram Shehzad; 27.08.2017
comment
@KhurramShehzad попробуйте новый фрагмент, и если он не работает, отправьте сообщение об ошибке. - person Muller20; 28.08.2017
comment
Это дало мне ошибку в model.fit(X_train, categorical_labels, epochs=30) и ошибка ValueError: Error when checking target: expected dense_1 to have shape (None, 1) but got array with shape (7810, 41) - person Khurram Shehzad; 28.08.2017