我想用Keras訓練一批訓練數據的多輸入NN,但我無法將一組輸入和輸出樣本傳遞給在模型上執行擬合或train_on_batch。培訓多輸入Keras NN與批處理訓練數據
我NN被定義爲以下:
i1 = keras.layers.Input(shape=(2,))
i2 = keras.layers.Input(shape=(2,))
i3 = keras.layers.Input(shape=(2,))
i_layer = keras.layers.Dense(2, activation='sigmoid')
embedded_i1 = i_layer(i1)
embedded_i2 = i_layer(i2)
embedded_i3 = i_layer(i3)
middle_concatenation = keras.layers.concatenate([embedded_i1, embedded_i2, embedded_i3], axis=1)
out = keras.layers.Dense(1, activation='sigmoid')(middle_concatenation)
model = keras.models.Model(inputs=[i1, i2, i3], outputs=out)
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
例如,輸入(成功地用於預測的輸出)的一個實例如下:
[array([[0.1, 0.2]]), array([[0.3, 0.5]]), array([[0.1, 0.3]])]
但是,當我嘗試訓練我的模型:
inputs = [[np.array([[0.1, 0.2]]), np.array([[0.3, 0.5]]), np.array([[0.1, 0.3]])],
[np.array([[0.2, 0.1]]), np.array([[0.5, 0.3]]), np.array([[0.3, 0.1]])]
]
outputs = np.ones(len(inputs))
model.fit(inputs, outputs)
我收到此錯誤:
ValueError: Error when checking model input: you are passing a list as input to your model, but the model expects a list of 3 Numpy arrays instead. The list you passed was: [[array([[ 0.1, 0.2]]), array([[ 0.3, 0.5]]), array([[ 0.1, 0.3]])], [array([[ 0.2, 0.1]]), array([[ 0.5, 0.3]]), array([[ 0.3, 0.1]])]]
我在做什麼錯?
如何使用一批輸入/輸出樣本來訓練多輸入NN?
謝謝!
我想你可能想看看[合併](https:// keras。io/layers/merge /)圖層,並將三個獨立的分支凝聚到一個組合網絡中,否則將您的輸入合併爲一個 – DJK
@ djk47463感謝您的提示!我需要三個輸入來分享他們的權重。因此,我構建了圖層'i_layer',將每個輸入添加到此圖層,然後連接此圖層的三個輸出以構建NN的其餘部分。 注:我只是刪除了一些內部圖層,以簡化代碼。 無論如何,你知道如何解決列車問題嗎? –
對不起我放棄了代碼快,沒有意識到你已經在做 – DJK