[英]Tensorflow, Keras: Tensor normalization by axis
假設我們有張量為A
圖像Tensor A
(None, 200, 200, 1)
。 其中None
是批處理大小,而(200, 200, 1)
是圖像大小。
如何在每個圖像上執行歸一化(0到1)(不for
迭代)?
那是:
A[0] = (A[0] - A[0].min()) / (A[0].max() - A[0].min())
A[1] = (A[1] - A[1].min()) / (A[1].max() - A[1].min())
...
A[n] = (A[n] - A[n].min()) / (A[n].max() - A[n].min())
如果我直接使用A = (A - A.min()) / (A.max() - A.min())
,它將通過全局max
和min
歸一化所有圖像。 我希望使用自己的max
和min
標准化每個圖像。
換句話說,如何實現max
或min
運算,將導致以下形狀: (None, 1, 1, 1)
,其中每個(1, 1, 1)
1,1,1 (1, 1, 1)
包含每個圖像的最大或最小。
您可以使用tf.reduce_max
和tf.reduce_min
。
import tensorflow as tf
A = tf.random_normal(shape=(-1, 200, 200, 1))
B = tf.reduce_max(A, axis=(1, 2, 3))
C = tf.reduce_min(A, axis=(1, 2, 3))
print(B.shape)
print(C.shape)
輸出:
(?,)
(?,)
另外,您的情況下的輸出必須為(None, 1, 1, 1)
1,1,1,1)形狀,而不是(None, 1, 1)
(None, 1, 1, 1)
形狀,因為您已經包括了最后一個通道尺寸。
B = tf.reshape(B, (-1, 1, 1, 1))
C = tf.reshape(C, (-1, 1, 1, 1))
print(B.shape)
print(C.shape)
上面的代碼提供以下輸出:
(?, 1, 1, 1)
(?, 1, 1, 1)
最后,為什么要從每個像素中減去max
,是要減去0-1之間的標准化每個圖像的min
?
D = (A - C) / (B - C)
print(D.shape)
給
(?, 200, 200, 1)
如預期的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.