2017-09-09 3 views
0

は、モデルである:ここではKeras LSTMは - > CNN寸法誤差ここ

model.add(LSTM(24, input_shape=(120,26), return_sequences = True, activation = 'relu')) 
model.add(convolutional.Conv1D(filters = 1, kernel_size=120,activation ='relu')) 
model.add(Dense(1)) 
model.add(Activation('sigmoid')) 
opt1 = keras.optimizers.RMSprop(lr=0.0001, rho=0.9, epsilon=1e-08, decay=0.0) 
model.compile(loss='binary_crossentropy', optimizer=opt1, metrics=['accuracy']) 

filepath="model_check-{epoch:02d}-{loss:.4f}.hdf5" 
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, 
          save_best_only=True, mode='min') 
callbacks_list = [checkpoint] 

model.fit(df_matrix3, y_matrix3, epochs=2000, batch_size=10000, verbose=2) 

は、入力の大きさ以下のとおりです。ここで

df_matrix3 = [0]*10000 
df_matrix3t= [0]*10000 
for x in range(10000): 
    df_matrix3[x]=df_matrix[:,0+x:120+x,:] 
    df_matrix3t[x] = df_matrix[:,1740000+x:1740120+x,:] 
df_matrix3 = np.reshape(df_matrix3,(10000,120,26)) 


y_matrix3 = y[0:10000] 
y_matrix3t = y[1740000:1750000] 
y_matrix3t = np.reshape(y_matrix3t,(10000,1)) 
y_matrix3 = np.reshape(y_matrix3,(-1,10000,1)) 
y_matrix3c = y[1740000:1750000] 

は私が取得していますエラーです:

ValueError: Error when checking target: expected activation_15 to have shape (None, 1, 1) but got array with shape (1, 10000, 1)

LSTMを10000のバッチとして実行すると、正しく実行されるため、このエラーはあまり意味がありません(Seque ncesはFalseに設定されます)。私はそれ以来、1つのCNNレイヤセットを追加するだけです。最初のレイヤーでreturn sequences = Trueとなり、出力は1入力あたり1アイテムとなり、1,10000,1の配列になるはずです。しかし、それは何か他のものを探していて、私はなぜそれがわからないのですか?

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
lstm_15 (LSTM)    (None, 120, 24)   4896  
_________________________________________________________________ 
conv1d_14 (Conv1D)   (None, 1, 1)    2881  
_________________________________________________________________ 
dense_14 (Dense)    (None, 1, 1)    2   
_________________________________________________________________ 
activation_14 (Activation) (None, 1, 1)    0   
================================================================= 
Total params: 7,779 
Trainable params: 7,779 

これは私が期待するものと完全に一致する私のレイヤーサイズです。

答えて

0

バッチサイズは常に最初のディメンションです。

実際には(10000,1,1)が必要です。

  • (1,1)の10000サンプル。

これは(None,1,1)です。フリーの唯一のディメンションは最初のバッチサイズです。

+0

これは興味深いことです。 LSTMを使って同じことを入力した場合、どのように次元が正常になるのでしょうか? – a1letterword

+0

申し訳ありませんが、私はあなたの質問を理解していない....しかし、それはシステムのルールです。最初の次元はバッチサイズであり、モデルに沿って変更することはできません。 –