LSTM 3D вход несоответствие размеров 3D выхода - PullRequest
0 голосов
/ 18 июня 2019

У меня есть простая сеть LSTM в Керасе:

def create_model(x):
    lstm_model = Sequential()
    lstm_model.add(LSTM(100, input_dim=x.shape[2], input_length=x.shape[1]))
    lstm_model.add(Dense(1,activation='sigmoid'))
    lstm_model.compile(loss='mean_squared_error', optimizer='adam')
    return lstm_model

и я пытаюсь обучить его данным, имеющим следующие формы:

ввод тренировочных данных: (100, 2784, 6), вывод тренировочных данных: (100, 2784, 1)
ввод данных проверки: (50, 27, 6), вывод данных проверки: (50, 27, 1)
ввод тестовых данных: (50, 27, 6), вывод тестовых данных: (50, 27, 1)

model.fit(train_x, train_y, validation_data=(validation_x, validation_y), epochs=EPOCHS, batch_size=BATCH_SIZE, shuffle=False, callbacks=[...])

Я продолжаю терпеть неудачу при измерениях либо потому, что а) данные проверки не совпадают с данными обучения, либо б) потому что формы у неправильны

Что я делаю не так?

P.S. Автономный код для удобства

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import LSTM, Dense

x_train=np.arange(1670400)
x_train=x_train.reshape((100, 2784, 6))
y_train=np.arange(278400)
y_train=y_train.reshape((100, 2784, 1))

x_val=np.arange(8100)
x_val=x_val.reshape((50, 27, 6))
y_val=np.arange(1350)
y_val=y_val.reshape((50, 27, 1))

x_test=np.arange(8100)
x_test=x_test.reshape((50, 27, 6))
y_test=np.arange(1350)
y_test=y_test.reshape((50, 27, 1))


def create_model(x):
    lstm_model = Sequential()
    lstm_model.add(LSTM(100, input_dim=x.shape[2], input_length=x.shape[1]))
    lstm_model.add(Dense(1,activation='sigmoid'))
    lstm_model.compile(loss='mean_squared_error', optimizer='adam')
    return lstm_model

model=create_model(x_train)
model.fit(x_train, y_train, validation_data=(x_val, y_val), epochs=10, batch_size=32, shuffle=False)

1 Ответ

0 голосов
/ 18 июня 2019

Эта модификация сработала:
изменив на batch_input_shape и добавив return_sequence = True к слою LSTM

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import LSTM, Dense

x_train=np.arange(1670400)
x_train=x_train.reshape((100, 2784, 6))
y_train=np.arange(278400)
y_train=y_train.reshape((100, 2784, 1))

x_val=np.arange(8100)
x_val=x_val.reshape((50, 27, 6))
y_val=np.arange(1350)
y_val=y_val.reshape((50, 27, 1))

x_test=np.arange(8100)
x_test=x_test.reshape((50, 27, 6))
y_test=np.arange(1350)
y_test=y_test.reshape((50, 27, 1))

def create_model():
    lstm_model = Sequential()
    lstm_model.add(LSTM(100, batch_input_shape=(None,None,6), return_sequences=True))
    lstm_model.add(Dense(1, activation='sigmoid'))
    lstm_model.compile(loss='mean_squared_error', optimizer='adam')
    return lstm_model

model=create_model()
model.fit(x_train, y_train, validation_data=(x_val, y_val), epochs=10, batch_size=32, shuffle=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...