2017-07-19 5 views
2

Warum gibt der folgende Code ValueError: Input 0 is incompatible with layer dense_14: expected min_ndim=2, found ndim=1? Es funktioniert, wenn ich unroll=True entferne, ein Parameter, von dem ich nicht erwarten würde, dass er die Ausgabedimension des LSTM beeinflusst.Keras inkompatible Eingabe Abmessungen beim Abrollen LSTM

from keras.models import Sequential 
from keras.layers import LSTM, Dense 
model = Sequential() 
model.add(LSTM(
    100, 
    batch_input_shape=(1, 1, 17), 
    unroll=True 
)) 
model.add(Dense(1)) 

Ich nehme an, es damit zu tun hat:

In [9]: from keras.models import Sequential 
    ...: from keras.layers import LSTM, Dense 
    ...: from keras import backend as K 
    ...: def LSTM_output_dimensions(*args,**kwargs): 
    ...: model = Sequential() 
    ...: model.add(LSTM(
    ...:  *args, 
    ...:  **kwargs 
    ...: )) 
    ...: return K.ndim(model.outputs[0]) 
    ...: 

In [10]: LSTM_output_dimensions(50, batch_input_shape=(1, 1, 17)) 
Out[10]: 2 

In [11]: LSTM_output_dimensions(50, batch_input_shape=(1, 1, 17),return_sequences=True) 
Out[11]: 3 

In [12]: LSTM_output_dimensions(50, batch_input_shape=(1, 1, 17),unroll=True) 
Out[12]: 1 

In [13]: LSTM_output_dimensions(50, batch_input_shape=(1, 1, 17),unroll=True,return_sequences=True) 
Out[13]: 2 
+0

Welche 'Keras' Version verwendest du? –

+0

keras 2.0.5 auf Python 2.7 – tba

Antwort

0

Dies scheint ein bug in Keras zu sein, der auftritt, weil unroll=True nicht relevant für eine Eingangsform (1, x) ist.