簡體   English   中英

在Keras中將復發層與密集層合並

[英]merging recurrent layers with dense layer in Keras

我想建立一個神經網絡,其中兩個第一層是前饋的,最后一個是循環的。 這是我的代碼:

model = Sequential()
model.add(Dense(150, input_dim=23,init='normal',activation='relu'))
model.add(Dense(80,activation='relu',init='normal'))
model.add(SimpleRNN(2,init='normal')) 
adam =OP.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
model.compile(loss="mean_squared_error", optimizer="rmsprop")  

我收到此錯誤:

Exception: Input 0 is incompatible with layer simplernn_11: expected  ndim=3, found ndim=2.
model.compile(loss='mse', optimizer=adam)

在Keras中,RNN層期望輸入為(nb_samples, time_steps, input_dim)是正確的。 但是,如果要在Dense圖層之后添加RNN圖層,則在重新整形RNN圖層的輸入后仍可以執行此操作。 重塑既可以用作第一層,也可以用作順序模型中的中間層。 示例如下:

重塑為Sequential模型中的第一層

model = Sequential()
model.add(Reshape((3, 4), input_shape=(12,)))
# now: model.output_shape == (None, 3, 4)
# note: `None` is the batch dimension

重塑為Sequential模型中的中間層

model.add(Reshape((6, 2)))
# now: model.output_shape == (None, 6, 2)

例如,如果您以下列方式更改代碼,則不會出現錯誤。 我檢查了它並編譯了模型而沒有報告任何錯誤。 您可以根據需要更改尺寸。

from keras.models import Sequential
from keras.layers import Dense, SimpleRNN, Reshape
from keras.optimizers import Adam

model = Sequential()
model.add(Dense(150, input_dim=23,init='normal',activation='relu'))
model.add(Dense(80,activation='relu',init='normal'))
model.add(Reshape((1, 80)))
model.add(SimpleRNN(2,init='normal')) 
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
model.compile(loss="mean_squared_error", optimizer="rmsprop")

在Keras中,您不能在Dense圖層之后放置Reccurrent圖層,因為Dense圖層將輸出作為(nb_samples,output_dim)。 但是,Recurrent層需要輸入為(nb_samples,time_steps,input_dim)。 因此,Dense層提供2-D輸出,但Recurrent層需要3-D輸入。 但是,您可以執行相反的操作,即在Recurrent層之后放置Dense圖層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM