我有模型A(自動編碼器),它將一批圖像A_in(原始圖像)作爲輸入,並輸出一批圖像A_out(重建圖像)。然後我有模型B(二進制分類器),它將一批圖像B_in作爲輸入,它是A_in和A_out的混合。如何連接兩個模型
我想讓B區分A_in和A_out,看看A是否做得很好,重建圖像。 B_out是給定圖像是A_in的概率。
B列車與A並列以對兩種圖像進行分類。 B_loss =(B_out - 標籤)。標籤爲0或1(原始或重建)。當我們優化B_loss時,我們只更新B參數。
我想訓練模型A,以便優化組合丟失函數:Combined_Loss =重建錯誤(A_out - A_in) - 分類錯誤(B_out - 標籤),以便它嘗試重建圖像並在同時。在這裏我只想更新A參數(我們不想在這裏幫助B)。
現在,我的問題是關於構造A_in和A_out的混合物,並將其饋送給B,以使圖A和B連接起來。
現在是這樣的:
A_out = autoencoder(A_in: orig_images)
B_out = classifier(B_in: numpy(mix(A_in, A_out))
如何定義它是這樣的:
A_out = autoencoder(A_in: orig_images)
B_out = classifier(mix(A_out, A_in))
所以,當我訓練A和B在同一時間:
sess.run([autoencoder_train_op, classifier_train_op], feed_dict=
{A_in: orig_images, B_in: classifier_images, labels: classifier_labels})
我不需要B_in佔位符(圖形將被連接)?
這裏是我的NumPy的代碼,構造classifier_images(混合(A_IN,A_OUT)):
reconstr_images = sess.run(A_out, feed_dict={A_in: orig_images})
half_and_half_images = np.concatenate((reconstr_images[:batch_size/2], orig_images[batch_size/2:]))
half_and_half_labels = np.zeros(labels.shape)
half_and_half_labels[batch_size/2:] = 1
random_indices = np.random.permutation(batch_size)
classifier_images = half_and_half_images[random_indices]
classifier_labels = half_and_half_labels[random_indices]
如何轉換成TensorFlow節點?
是否有任何特定的問題,您正在轉換此代碼爲tf?這似乎是非常簡單的代碼,應該可以使用'tf.concat','tf.zeros','tf.random_shuffle'等來實現。另外,我不確定爲什麼你需要洗牌。據推測,不同的圖像在同一時間進給只是爲了配料和獨立處理。如果是這樣,你不應該洗牌,除非你批量大,你想洗牌更好的優化軌跡。 – iga
關於洗牌的好處 - 這不是必要的。然而,這並沒有改變主要問題:如何將分類器(B_in:numpy(mix(A_in,A_out))轉換爲分類器(mix(A_out,A_in)),以便這兩個圖形連接起來? – MichaelSB
我明白了。 。這個問題,我會嘗試用一個答案回答它 – iga