簡體   English   中英

如何在keras中同時訓練多個神經網絡?

[英]How do I train multiple neural nets simultaneously in keras?

如何多次訓練1個模型並將它們組合在輸出層?

例如:

model_one = Sequential() #model 1
model_one.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28)))
model_one.add(Flatten())
model_one.add(Dense(128, activation='relu'))

model_two = Sequential() #model 2
model_two.add(Dense(128, activation='relu', input_shape=(784)))
model_two.add(Dense(128, activation='relu'))

model_???.add(Dense(10, activation='softmax')) #combine them here

model.compile(loss='categorical_crossentropy', #continu together
          optimizer='adam',
          metrics=['accuracy'])


model.fit(X_train, Y_train, #continu together somehow, even though this would never work because X_train and Y_train have wrong formats
      batch_size=32, nb_epoch=10, verbose=1)

我聽說我可以通過圖形模型來做到這一點,但我找不到任何文檔。

編輯:回復以下建議:

A1 = Conv2D(20,kernel_size=(5,5),activation='relu',input_shape=( 28, 28, 1))
---> B1 = MaxPooling2D(pool_size=(2,2))(A1)

拋出此錯誤:

AttributeError: 'Conv2D' object has no attribute 'get_shape'

圖表符號會為你做。 基本上,您為每個圖層提供一個唯一的句柄,然后使用末尾括號中的句柄鏈接回上一個圖層:

layer_handle = Layer(params)(prev_layer_handle)

請注意,第一層必須是Input(shape=(x,y)) ,沒有先前的連接。

然后,當你制作模型時,你需要告訴它它需要帶有列表的多個輸入:

model = Model(inputs=[in_layer1, in_layer2, ..], outputs=[out_layer1, out_layer2, ..])

最后,當您訓練它時,您還需要提供與您的定義相對應的輸入和輸出數據列表:

model.fit([x_train1, x_train2, ..], [y_train1, y_train2, ..])

同時其他一切都是一樣的,所以你只需要將上面的內容組合起來就可以得到你想要的網絡布局:

from keras.models import Model
from keras.layers import Input, Convolution2D, Flatten, Dense, Concatenate

# Note Keras 2.02, channel last dimension ordering

# Model 1
in1 = Input(shape=(28,28,1))
model_one_conv_1 = Convolution2D(32, (3, 3), activation='relu')(in1)
model_one_flat_1 = Flatten()(model_one_conv_1)
model_one_dense_1 = Dense(128, activation='relu')(model_one_flat_1)

# Model 2
in2 = Input(shape=(784, ))
model_two_dense_1 = Dense(128, activation='relu')(in2)
model_two_dense_2 = Dense(128, activation='relu')(model_two_dense_1)

# Model Final
model_final_concat = Concatenate(axis=-1)([model_one_dense_1, model_two_dense_2])
model_final_dense_1 = Dense(10, activation='softmax')(model_final_concat)

model = Model(inputs=[in1, in2], outputs=model_final_dense_1)

model.compile(loss='categorical_crossentropy', #continu together
              optimizer='adam',
              metrics=['accuracy'])

model.fit([X_train_one, X_train_two], Y_train,
          batch_size=32, nb_epoch=10, verbose=1)

文檔可以在Functional Model API中找到 我建議閱讀其他問題或查看Keras的回購 ,因為文檔目前沒有很多例子。

暫無
暫無

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

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