TensorFlow tf.one_hot()剖析

2304 ワード

1.まずone_を説明するhot encoding
one_hot encodingは、機械学習における離散型特徴に対する処理手段として用いることができ、一般に、監督学習における分類問題サンプルの寸法データの処理に用いられる.例えば、3種類の特徴{label 1,label 2,label 3}があり、3つのbitビットで符号化を実現する必要があり、bitビットが1の位置は元の特徴値に対応し、すなわち、上記の特徴に対応する符号化は{100,010,001}である.
2.tf.one_hot( label_batch,  class_num )
tf.one_hot()関数のプロトタイプは次のとおりです.
one_hot(indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None)

indices:on_を表しますvalueが存在するインデックス、その他の位置値off_value.タイプはtensorで、そのサイズはdepthと共に出力tensorのサイズを決定します.
depth:符号化深さ.
on_value & off_valueは符号化開閉値、デフォルトはそれぞれ1と0、indicesが指定したインデックスはon_value値;
axis:符号化された軸、場合によっては-1、0または-1、0、1、デフォルトは-1
dtype:デフォルトはon_valueまたはoff_valueのタイプ、on_が指定されていない場合valueまたはoff_valueの場合、デフォルトはtfである.float 32タイプ.
one-hot tensorを返します.
2.応用
(1)indicesはスカラーであり、出力は「depth」の長さのベクトルである.
(2)indicesは長さfeaturesのベクトルであり、出力寸法は(a)axis=-1、features*depth(b)axis=0、depth*features
(3)indicesは[batch,features]サイズのマトリクスであり、出力サイズは:
(a)axis=-1,batch*features*depth(b)axis=1,batch*depth*features(c)axis=0,depth*batch*features
第(2)の例:
   ```python      indices = [0, 2, -1, 1]      depth = 3      on_value = 5.0      off_value = 0.0      axis = -1
    ```
出力サイズは4*3,``python output=[5.00.0]//one_hot(0)                          [0.0 0.0 5.0]  //one_hot(2)                          [0.0 0.0 0.0]  //one_hot(-1)                          [0.0 5.0 0.0]  //one_hot(1)
                          ```
(3)例
   ```python      indices = [[0, 2], [1, -1]]      depth = 3      on_value = 1.0      off_value = 0.0      axis = -1
    ```
出力サイズ:2*2*3、結果:``python output=[[1.0,0.0,0.0]//one_hot(0)                                            [0.0, 0.0, 1.0]  //one_hot(2)                                          ][                                            [0.0, 1.0, 0.0]  //one_hot(1)                                            [0.0, 0.0, 0.0]  //one_hot(-1)                                          ]
                                        ```
3.分類コードにおける寸法データの処理:
onehot_label_batch = tf.one_hot(label_batch, class_num)
ラベル(label)データにone-hot vectorsを使用し、label n(数値)はn次元数が1のclass_のみとして表されるnum次元ベクトル、nは0,1...class_num-1.5種類ある場合class_num=5,ラベル0は[1,0,0,0,0,0]を表し,ラベル1は[0,1,0,0,0]を表し,これに類する.