亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 Keras 合并層用于具有兩個輸出的自動編碼器

如何將 Keras 合并層用于具有兩個輸出的自動編碼器

呼喚遠方 2021-06-14 17:38:58
假設我有兩個輸入:XandY我想設計和聯合自動編碼器來重建X'and Y'。如圖所示,X是音頻輸入,Y是視頻輸入。這種深層架構很酷,因為它有兩個輸入和兩個輸出。此外,它們共享中間的某個層。我的問題是如何使用Keras來編寫這個自動編碼器。假設除了中間的共享層之外,每一層都是全連接的。這是我的代碼如下: from keras.layers import Input, Dense from keras.models import Model import numpy as np X = np.random.random((1000, 100)) y = np.random.random((1000, 300))  # x and y can be different size # the X autoencoder layer  Xinput = Input(shape=(100,)) encoded = Dense(50, activation='relu')(Xinput) encoded = Dense(20, activation='relu')(encoded) encoded = Dense(15, activation='relu')(encoded) decoded = Dense(20, activation='relu')(encoded) decoded = Dense(50, activation='relu')(decoded) decoded = Dense(100, activation='relu')(decoded) # the Y autoencoder layer  Yinput = Input(shape=(300,)) encoded = Dense(120, activation='relu')(Yinput) encoded = Dense(50, activation='relu')(encoded) encoded = Dense(15, activation='relu')(encoded) decoded = Dense(50, activation='relu')(encoded) decoded = Dense(120, activation='relu')(decoded) decoded = Dense(300, activation='relu')(decoded)我只是中間有和 的15節點。我的問題是如何用損失函數訓練這個聯合自動編碼器?XY\|X-X'\|^2 + \|Y-Y'\|^2
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您的代碼方式是您有兩個單獨的模型。雖然您可以簡單地將共享表示層的輸出用于以下兩個子網,但您必須合并這兩個子網作為輸入:


Xinput = Input(shape=(100,))

Yinput = Input(shape=(300,))


Xencoded = Dense(50, activation='relu')(Xinput)

Xencoded = Dense(20, activation='relu')(Xencoded)



Yencoded = Dense(120, activation='relu')(Yinput)

Yencoded = Dense(50, activation='relu')(Yencoded)


shared_input = Concatenate()([Xencoded, Yencoded])

shared_output = Dense(15, activation='relu')(shared_input)


Xdecoded = Dense(20, activation='relu')(shared_output)

Xdecoded = Dense(50, activation='relu')(Xdecoded)

Xdecoded = Dense(100, activation='relu')(Xdecoded)


Ydecoded = Dense(50, activation='relu')(shared_output)

Ydecoded = Dense(120, activation='relu')(Ydecoded)

Ydecoded = Dense(300, activation='relu')(Ydecoded)

現在你有兩個獨立的輸出。所以你需要兩個單獨的損失函數,無論如何都會添加它們來編譯模型:


model = Model([Xinput, Yinput], [Xdecoded, Ydecoded])

model.compile(optimizer='adam', loss=['mse', 'mse'], loss_weights=[1., 1.])

然后,您可以通過以下方式簡單地訓練模型:


model.fit([X_input, Y_input], [X_label, Y_label])


查看完整回答
反對 回復 2021-06-22
  • 2 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號