Мой ввод - это просто файл csv с 339732 строками и двумя столбцами:
- первая из 29 значений характеристик, т. е. X
- второй - двоичное значение метки, то есть Y
Я пытаюсь обучить свои данные многослойной модели LSTM:
data_dim = 29
timesteps = 8
num_classes = 2
model = Sequential()
model.add(LSTM(30, return_sequences=True,
input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 30
model.add(LSTM(30, return_sequences=True)) # returns a sequence of vectors of dimension 30
model.add(LSTM(30)) # return a single vector of dimension 30
model.add(Dense(1, activation='softmax'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.summary()
model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose = 1)
Это вызывает ошибку:
Traceback (последний вызов последним): файл first_approach.py, строка 80, в model.fit (X_train, y_train, batch_size = 400, epochs = 20, verbose = 1)
ValueError: ошибка при проверке ввода модели: ожидалось, что lstm
input будет иметь 3 измерения, но получил массив с формой (339732, 29)data_dim = 29 timesteps = 8 num_classes = 2 model = Sequential() model.add(LSTM(30, return_sequences=True, input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 30 model.add(LSTM(30, return_sequences=True)) # returns a sequence of vectors of dimension 30 model.add(LSTM(30)) # return a single vector of dimension 30 model.add(Dense(1, activation='softmax')) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) model.summary() model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose = 1)
Я попытался изменить форму ввода с помощью X_train.reshape((1,339732, 29))
, но это не сработало, показывая ошибку:
ValueError: ошибка при проверке ввода модели: ожидалось, что lstm
input будет иметь форму (None, 8, 29), но получил массив с формой (1, 339732, 29)data_dim = 29 timesteps = 8 num_classes = 2 model = Sequential() model.add(LSTM(30, return_sequences=True, input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 30 model.add(LSTM(30, return_sequences=True)) # returns a sequence of vectors of dimension 30 model.add(LSTM(30)) # return a single vector of dimension 30 model.add(Dense(1, activation='softmax')) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) model.summary() model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose = 1)
Как я могу передать свой ввод в LSTM?