Как вписать список массивов в нейронную сеть LSTM?

1

Я новичок в Keras, поэтому я очень ценю любую помощь здесь. Для моего проекта я пытаюсь обучить нейронную сеть на нескольких временных рядах. Я получил его работу, запустив цикл for, чтобы соответствовать каждому временному ряду модели. Код выглядит так:

for i in range(len(train)):
    history = model.fit(train_X[i], train_Y[i], epochs=20, batch_size=6, verbose=0, shuffle=True)

Если я не ошибаюсь, я занимаюсь онлайн-обучением здесь. Теперь я пытаюсь провести периодическое обучение, чтобы увидеть, лучше ли результат. Я попытался поместить список, состоящий из всех таймсерий (каждый преобразованный в массив numpy), но я получаю эту ошибку:

Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 56 arrays:

Вот информация о наборе данных и модели:

model = Sequential()
model.add(LSTM(1, input_shape=(1,16),return_sequences=True))
model.add(Flatten())
model.add(Dense(1, activation='tanh'))
model.compile(loss='mae', optimizer='adam', metrics=['accuracy'])
model.summary()

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_2 (LSTM)                (None, 1, 1)              72        
_________________________________________________________________
flatten_2 (Flatten)          (None, 1)                 0         
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 2         
=================================================================
Total params: 74
Trainable params: 74
Non-trainable params: 0

print(len(train_X), train_X[0].shape, len(train_Y), train_Y[0].shape)

56 (1, 23, 16) 56 (1, 23, 1)

Вот блок кода, который дает мне ошибку:

pyplot.figure(figsize=(16, 25))
history = model.fit(train_X, train_Y, epochs=1, verbose=1, shuffle=False, batch_size = len(train_X))
  • 0
    не могли бы вы сказать нет. временных шагов и и нет. особенностей? Кроме того, почему есть причина, почему вы используете flatten слой?
  • 0
    @krishna спасибо за помощь. 23 временных шага и 16 функций. Использование выравнивания слоя, потому что я хотел один выход.
Теги:
tensorflow
machine-learning
keras
lstm

1 ответ

0

Форма ввода LSTM должна быть: batch_size, timesteps, features Но мы не должны упоминать batch_size в форме ввода, если вы хотите, чтобы вы могли использовать batch_input_shape.

model = Sequential()
model.add(LSTM(1, input_shape=(23,16),return_sequences=True))
# model.add(Flatten())
model.add(Dense(1, activation='tanh'))
model.compile(loss='mae', optimizer='adam', metrics=['accuracy'])
model.summary()


X = np.random.random((56,1, 23, 16)) 
y = np.random.random((56,1, 23, 1))
X=np.squeeze(X,axis =1) #as input shape should be ('batch_size', 'timesteps', 'features')
y = np.squeeze(y,axis =1)
model.fit(X,y,epochs=1, verbose=1, shuffle=False, batch_size = len(X))

Я не уверен, что он служит вашей цели.

  • 0
    я не думаю, что это решает проблему. У меня есть список из 56 временных рядов. Я пытаюсь вписать список в модель. Я также изучаю возможность создания подходящего генератора для пакетного обучения, но это также не работает.
  • 0
    @DavidLuong Что вы подразумеваете под временным рядом «56»? Можете ли вы уточнить немного. Также fit_generator используется, когда данные не могут быть помещены в память, если это не так, нет смысла это делать.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню