簡體   English   中英

輸入圖像大小(以tf.gradients為單位)

[英]The input image size in tf.gradients

我正在嘗試計算相對於輸入圖像的某一層的梯度。 漸變定義為

feature = g.get_tensor_by_name('inception/conv2d0_pre_relu:0')
gradient = tf.gradients(tf.reduce_max(feature, 3), x)

而我的輸入圖像的形狀為(299,299),即初始訓練的大小

print(img.shape)
# output (299,299,3)

然后,相對於輸入的梯度可以計算為

img_4d=img[np.newaxis]
res = sess.run(gradient, feed_dict={x: img_4d})[0]
print(res.shape)
# output (1,299,299,3)

我們看到漸變具有與輸入圖像相同的形狀,這是預期的。

但是,似乎可以使用任何大小的圖像,但仍然可以得到漸變。 例如,如果我有一個img_resized與形狀(150,150,3),相對於梯度至該輸入也將與形狀(150,150,3):

img_resized=skimage.transform.resize(img, [150,150], preserve_range=True)
img_4d=img_resized[np.newaxis]
res = sess.run(gradient, feed_dict={x: img_4d})[0]
res.shape
# output (1,150,150,3)

那為什么行得通呢? 在我的幼稚圖片中,輸入圖像的尺寸必須固定為(299,299,3),並且相對於輸入的某一層的漸變將始終為(299,299,3)。 為什么能夠生成其他大小的漸變?

換句話說,以上代碼會發生什么? 當我們輸入形狀為(150,150,3)的圖像時,tensorflow是否將圖像大小調整為(299,299,3)並計算形狀為(299,299,3)的梯度,然后將梯度調整為(150,150,3)?

這是預期的現象,尤其是。 在初始網絡的情況下,由於是完全卷積網絡,它可以與任何大小的輸入配合使用。 與Alexnet或VGG依賴於網絡后期的完全連接層不同,完全卷積網絡可以在任何大小的輸入上工作。 希望這能回答您的問題。

暫無
暫無

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

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