1
Here,我讀了一些風格轉移的tensorflow實現。 具體而言,它定義了即將被優化的損失。在一個損失函數,它說: `風格轉移實現tensorflow
def sum_style_losses(sess, net, style_imgs):
total_style_loss = 0.
weights = args.style_imgs_weights
for img, img_weight in zip(style_imgs, weights):
sess.run(net['input'].assign(img))
style_loss = 0.
for layer, weight in zip(args.style_layers, args.style_layer_weights):
a = sess.run(net[layer])
x = net[layer]
a = tf.convert_to_tensor(a)
style_loss += style_layer_loss(a, x) * weight
style_loss /= float(len(args.style_layers))
total_style_loss += (style_loss * img_weight)
`
優化被稱爲與當前會話:
optimizer.minimize(sess)
所以會話啓動並運行,但在運行時,它會在for循環中調用進一步的run
。任何人都可以排除張量流邏輯,特別是爲什麼x
包含輸入圖像(而不是樣式圖像)的特徵向量。對我而言,似乎有兩個並行的runs
。
這對我來說很清楚。所以當'minim'實際運行時,它會調用丟失函數。在這裏,另一個運行開始,但仍然必須有最小化運行的狀態來獲得'x = net [layer]'。之前的語句,即'a = ...',也在同一層評估網絡,但不干擾'x = ...'。所以我的問題是tensorflow如何處理這種情況。是否有一個新的子圖構造? – user1225905
該圖只構造一次...會話可根據所需輸出執行圖(子圖)的不同部分。您可以使用'tensorboard'來檢查子圖。看到一個例子[這裏](http://stackoverflow.com/questions/43830022/compute-gradient-norm-of-each-part-of-composite-loss-function/43944183#43944183)。 – Alex