web-dev-qa-db-ja.com

tensorflowでテンソルのスケールを変更する

タイトルを間違えたら申し訳ありませんが、これの言い方がわかりませんでした。とにかく、私は一連の値のテンソルを持っていますが、テンソル内のすべての要素が0〜255の範囲にあることを確認したいと思います(または0-1も機能します)。ただし、softmaxのようにすべての値の合計を1または255にしたくないので、値を小さくします。

これを行う方法はありますか?

ありがとう!

13
agupta231

データを正規化しようとしています。古典的な正規化式は次のとおりです。

normalize_value = (value − min_value) / (max_value − min_value)

Tensorflowの実装は次のようになります。

tensor = tf.div(
   tf.subtract(
      tensor, 
      tf.reduce_min(tensor)
   ), 
   tf.subtract(
      tf.reduce_max(tensor), 
      tf.reduce_min(tensor)
   )
)

テンソルのすべての値は0と1の間になります。

[〜#〜]重要[〜#〜]:テンソルにfloat/double値があることを確認してください。そうでない場合、出力テンソルには0と1しかありません。整数テンソルがある場合は、最初にこれを呼び出します。

tensor = tf.to_float(tensor)
26
Will Glück

sigmoid(tensor) * 255が実行する必要があります。

2
Albert

Wikipediaの feature scaling によると、単位長へのスケーリングを試すこともできます。

enter image description here

これは、次のコードセグメントを使用して実装できます。

In [3]: a = tf.constant([2.0, 4.0, 6.0, 1.0, 0])                                                                                                                                                                     
In [4]: b = a / tf.norm(a)
In [5]: b.eval()
Out[5]: array([ 0.26490647,  0.52981293,  0.79471946,  0.13245323,  0.        ], dtype=float32)
2
Lerner Zhang