簡體   English   中英

Tensorflow,Keras:通過軸進行張量歸一化

[英]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()) ,它將通過全局maxmin歸一化所有圖像。 我希望使用自己的maxmin標准化每個圖像。

換句話說,如何實現maxmin運算,將導致以下形狀: (None, 1, 1, 1) ,其中每個(1, 1, 1) 1,1,1 (1, 1, 1)包含每個圖像的最大或最小。

您可以使用tf.reduce_maxtf.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.

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