0

次の形式のテンソル(ロジットと呼びます)を変換したい

int32 - [batch_size]

次の形式のテンソル (ラベルと呼びます) に

 [batch_size, 10]

たとえば、batch_size=3 の場合

logits=[1,6,9]
labels=[[0,1,0,0,0,0,0,0,0,0],
        [0,0,0,0,0,0,1,0,0,0],
        [0,0,0,0,0,0,0,0,0,1]]

tensorflow mnist の例 ( https://github.com/tensorflow/tensorflow/tree/r0.9/tensorflow/examples/tutorials/mnist )でコスト関数を 2 次関数に変更したいので、この質問が出てきました。 .py および mnist.py 内。mnist.py で変更したい:

    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels, name='xentropy')
    loss = tf.reduce_mean(cross_entropy, name='xentropy_mean') 

loss= tf.reduce_sum(tf.squared_difference(logits,labels))

しかし、問題は次のとおりです。

Logits tensor, float - [batch_size, 10];  
Labels tensor, int64 - [batch_size].

だから私はラベルを「ベクトル化」する必要があります!? これを行う方法を知っている人はいますか?

4

1 に答える 1

1

「ベクトル化」というラベルは、ワンホット エンコーディングと呼ばれます。

tf.one_hot関数を探しています。

この関数は次のものを取ります。

  1. インデックスのリスト (logitsベクトル)
  2. パラメータ: ワンホット ベクトルのdepth深さ (ワンホット エンコードされたラベルの長さ)
  3. on_value&off_value必要に応じて変更できます (ただし、探しているのはデフォルト値の 1 と 0 です)。
  4. dtypeそれがテンソル出力タイプです。

したがって、ラベルを次のようにワンホット エンコードできます。

one_hot_labels = tf.one_hot(logits, 10, dtype=tf.uint8)

one_hot_labelstf.Tensorオブジェクトです。

Python からそのコンテンツにアクセスする必要がある場合は、忘れずに eval (または実行) してください。

おもちゃの例を次に示します。

import tensorflow as tf.
tf.InteractiveSession()
logits=[1,6,9]
one_hot_labels = tf.one_hot(logits, 10, dtype=tf.uint8)
print(one_hot_labels.eval())

出力:

[[0 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 1 0 0 0]
 [0 0 0 0 0 0 0 0 0 1]]
于 2016-06-17T15:04:02.500 に答える