tensorflow には、カテゴリ データを処理するための scikit Learn の1 つのホット エンコーダーに似たものがありますか? tf.string のプレースホルダーを使用すると、カテゴリ データとして動作しますか?
データをテンソルフローに送信する前に手動で前処理できることはわかっていますが、データを組み込むと非常に便利です。
tensorflow には、カテゴリ データを処理するための scikit Learn の1 つのホット エンコーダーに似たものがありますか? tf.string のプレースホルダーを使用すると、カテゴリ データとして動作しますか?
データをテンソルフローに送信する前に手動で前処理できることはわかっていますが、データを組み込むと非常に便利です。
任意の整数または整数のリストをワンホット エンコードする簡単で短い方法:
a = 5
b = [1, 2, 3]
# one hot an integer
one_hot_a = tf.nn.embedding_lookup(np.identity(10), a)
# one hot a list of integers
one_hot_b = tf.nn.embedding_lookup(np.identity(max(b)+1), b)
TensorFlow の最近のバージョン (ナイトリーやおそらく 0.7.1) には、必要な処理を行う tf.one_hot という op があります。見てみな!
一方、密行列があり、その中の値を調べて集計したい場合は、embedding_lookup 関数を使用することをお勧めします。
tf.nn.embedding_lookupを見てください。カテゴリ ID からその埋め込みにマップされます。
入力データに使用する方法の例については、こちらを参照してください。
それにはいくつかの方法があります。
ans = tf.constant([[5, 6, 0, 0], [5, 6, 7, 0]]) #batch_size*max_seq_len
labels = tf.reduce_sum(tf.nn.embedding_lookup(np.identity(10), ans), 1)
>>> [[ 0. 0. 0. 0. 0. 1. 1. 0. 0. 0.]
>>> [ 0. 0. 0. 0. 0. 1. 1. 1. 0. 0.]]
それを行う他の方法はです。
labels2 = tf.reduce_sum(tf.one_hot(ans, depth=10, on_value=1, off_value=0, axis=1), 2)
>>> [[0 0 0 0 0 1 1 0 0 0]
>>> [0 0 0 0 0 1 1 1 0 0]]