2016-09-02 3 views
2

Я хочу создать stateful LSTM в keras. Я дал ему такую ​​команду:Keras stateful LSTM error

model.add(LSTM(300,input_dim=4,activation='tanh',stateful=True,batch_input_shape=(19,13,4),return_sequences=True)) 

, где размер партии = 19. Но работает он дает ошибку

Exception: In a stateful network, you should only pass inputs with a number of samples that can be divided by the batch size. Found: 8816 samples. Batch size: 32. 

Я не уточнил размер 32 партии в любом месте в моем скрипте и 19 делится на 8816

ответ

2

Чтобы динамически размер ваших данных и партии:

Размер данных и подготовка образца раскол:

data_size = int(len(supervised_values)) 
train_size_initial = int(data_size * train_split) 
x_samples = supervised_values[-data_size:, :] 

Размер количество тренировочных образцов до размера партии:

if train_size_initial < batch_size_div: 
    batch_size = 1 
else: 
    batch_size = int(train_size_initial/batch_size_div) 
train_size = int(int(train_size_initial/batch_size) * batch_size) # provide even division of training/batches 
val_size = int(int((data_size - train_size)/batch_size) * batch_size) # provide even division of val/batches 
print('Data Size: {} Train Size: {} Batch Size: {}'.format(data_size, train_size, batch_size)) 

Разделить данные на поездах и наборы для проверки

train, val = x_samples[0:train_size, 0:-1], x_samples[train_size:train_size + val_size, 0:-1] 
6

model.fit() делает дозирование (в отличие от model.train_on_batch, например). Следовательно, он имеет параметр batch_size, который по умолчанию равен 32.

Измените это на размер партии ввода и он будет работать должным образом.

Пример:

batch_size = 19 

model = Sequential() 
model.add(LSTM(300,input_dim=4,activation='tanh',stateful=True,batch_input_shape=(19,13,4),return_sequences=True)) 

model.fit(x, y, batch_size=batch_size) 
+0

Я пробовал. Но опять же он дает ту же ошибку –

+0

Затем вы должны обновить свой вопрос с минимальным рабочим примером, который реплицировал ошибку. – nemo

Смежные вопросы