Keras / Python - Se um RNN é monitorada, um input_shape completo deve ser fornecido (incluindo tamanho do lote)

votos
2

Eu estou tentando implementar um RNN stateful, no entanto, mantém me pedindo um input_shape completo (incluindo o tamanho do lote). Tentou coisas diferentes nos argumentos input_shape e input_batch_size, no entanto ninguém parece funcionar. qualquer um pode brilhar alguma luz sobre isso?

Código:

model=Sequential()      
model.add(SimpleRNN(init='uniform',output_dim=80,input_dim=len(pred_frame.columns),stateful=True,batch_input_shape=(len(pred_frame.index),len(pred_frame.columns)),input_shape=(len(pred_frame.index),len(pred_frame.columns))))
model.add(Dense(output_dim=200,input_dim=len(pred_frame.columns),init=glorot_uniform))
model.add(Dense(output_dim=1))
model.compile(loss=mse, class_mode='scalar', optimizer=sgd)
model.fit(X=predictor_train, y=target_train, batch_size=len(pred_frame.index),show_accuracy=True)

traceback:

File /Users/file.py, line 1483, in Pred
model.add(SimpleRNN(init='uniform',output_dim=80,input_dim=len(pred_frame.columns),stateful=True,batch_input_shape=(len(pred_frame.index),len(pred_frame.columns)),input_shape=(len(pred_frame.index),len(pred_frame.columns))))
File /Library/Python/2.7/site-packages/keras/layers/recurrent.py, line 194, in __init__
super(SimpleRNN, self).__init__(**kwargs)
File /Library/Python/2.7/site-packages/keras/layers/recurrent.py, line 97, in __init__
super(Recurrent, self).__init__(**kwargs)
File /Library/Python/2.7/site-packages/keras/layers/core.py, line 43, in __init__
self.set_input_shape((None,) + tuple(kwargs['input_shape']))
File /Library/Python/2.7/site-packages/keras/layers/core.py, line 141, in set_input_shape
self.build()
File /Library/Python/2.7/site-packages/keras/layers/recurrent.py, line 199, in build
self.reset_states()
File /Library/Python/2.7/site-packages/keras/layers/recurrent.py, line 221, in reset_states
'(including batch size).')
Exception: If a RNN is stateful, a complete input_shape must be provided (including batch size).
Publicado 11/03/2016 em 21:06
fonte usuário
Em outras línguas...                            


2 respostas

votos
3

Você precisa fornecer apenas o batch_input_shape = parâmetro, e não o parâmetro input_shape. Além disso, para evitar erros de forma de entrada, certifique-se o tamanho dos dados de treinamento é um múltiplo de batch_size. E, finalmente, se você estiver usando splits de validação, você tem que ter certeza de que ambas as divisões também são múltiplos do batch_size.

# ensure data size is a multiple of batch_size
data_size=data_size-data_size%batch_size
# ensure validation splits are multiples of batch_size
increment=float(batch_size)/len(data_size)
val_split=float(int(val_split/(increment))) * increment
Respondeu 14/03/2016 em 13:44
fonte usuário

votos
0

Em sua definição de SimpleRNN, remover input_dime input_shape, definir:

batch_input_shape = (Number_Of_sequences, Size_Of_Each_Sequence,
                     Shape_Of_Element_In_Each_Sequence) 

batch_input_shape deve ser um tuplo de comprimento, pelo menos, três.

Se você passa suas seqüências, um por um, definir:

Number_Of_sequences = 1

Se o tamanho de suas seqüências não é fixo, definido:

Size_Of_Each_Sequence = None
Respondeu 30/06/2016 em 08:02
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more