deep learning (lstm) with keras and variable size of inputs

拟墨画扇 提交于 2020-01-05 04:13:13

问题


I am trying to implement a lstm model with keras. The problem is that I have data of different shapes. My data looks like this:

col1 col2 col3 col4 col5

[1,2,3] [2,3,4] [3,4,5] [5,6,7] [4,5,9]

[0,2] [1,5] [1,24] [11,7] [-1,4]

[0,2,4,5] [1,5,7,8] [1,24,-7,6] [11,7,4,5] [-1,4,1,2]

My code is

import numpy as np
import pandas as pd
import h5py
from sklearn.model_selection import train_test_split
from keras.layers import Dense
from keras.layers import Input, LSTM
from keras.models import Model

X_train, X_test, y_train, y_test = train_test_split(X, y_target, test_size=0.2, random_state=1)  
batch_size = 32 
timesteps = 300 
output_size = 1
epochs=120

inputs = Input(batch_shape=(batch_size, timesteps, output_size))
lay1 = LSTM(10, stateful=True, return_sequences=True)(inputs)
lay2 = LSTM(10, stateful=True, return_sequences=True)(lay1)
output = Dense(units = output_size)(lay2)

regressor = Model(inputs=inputs, outputs = output)
regressor.compile(optimizer='adam', loss = 'mae')
regressor.summary()

for i in range(epochs):
    print("Epoch: " + str(i))
    regressor.fit(X_train, y_train, shuffle=False, epochs = 1, batch_size = batch_size)
    regressor.reset_states()

The error I have when I run the code is :

ValueError: Error when checking input: expected input_5 to have 3 dimensions, but got array with shape (11200, 5) #11200 lines, 5 columns

Thanks


回答1:


A multidimensional numpy array need have a clear shape so putting array of different length inside the same numpy array will result in a numpy array of objects instead odf the desired multidimension array.

So basically it's not possible to feed your data to keras in one go.

However there are several possible solutions. Most of them require that your keras input shape has to be None in your timestep dimension:

  1. Use padding that your data always has the same shape
  2. train with batch_size = 1
  3. Sort your data in batches in a way that inside each batch every sample has the same shape.

The last two options require the usage of the fit_generator option, because you have to feed the data step wise.



来源:https://stackoverflow.com/questions/50331324/deep-learning-lstm-with-keras-and-variable-size-of-inputs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!