2017-04-25 6 views
3

私はしばらくの間Tensorflowで作業していましたが、わかりにくいものの1つは、tf.contribのモデルのカテゴリターゲット列をエンコードする方法です.learnモデル。Tensorflowでの分類のためのエンコーディングターゲット列

私たちは下記のコードのように似ている入力機能を定義することを承知している:

def input_fn(joined): 
    continuous_cols = {k: tf.constant(joined[k].values) 
        for k in CONTINUOUS_COLUMNS} 

    categorical_cols = {k: tf.SparseTensor(
     indices=[[i, 0] for i in range(joined[k].size)], 
     values=joined[k].values, 
     dense_shape=[joined[k].size, 1]) 
         for k in CATEGORICAL_COLUMNS} 

    # Merges the two dictionaries into one. 
    feature_cols = dict(continuous_cols.items() | categorical_cols.items()) 
    target = tf.constant(joined[target_col].values) 
    return feature_cols, target 

def train_input_fn(): 
    return input_fn(train_frame) 
def test_input_fn(): 
    return input_fn(test_frame) 

これは、バイナリ分類のためか、我々がターゲットのいずれかの変数sklearnのでエンコードを事前例に完全に正常に動作しますLabelEncoderまたは他の方法です。しかし、tf.contrib.learnがそれを受け入れることができるように、tensflowを使ってその変数をエンコードする方法。

私は、次のターゲット列のコードを変更してみました:

target = tf.SparseTensor(
     indices=[[i, 0] for i in range(joined[target_col].size)], 
     values=joined[target_col].values, 
     dense_shape=[joined[target_col].size, 1]) 

それは文字列変数であるので、私はまばらなテンソルはそれを を行う必要があります思った。しかし、これはエラーを与えるとして:

ValueError: SparseTensor is not supported. 

ターゲットカテゴリ変数のDNNClassifierモデルの入力機能で、プレースホルダを使用する必要があるものを指定するのに助けてくれる人はいますか。

答えて

0

DNN Classifierは、Tensors no Sparseとしてラベルをサポートします。期待されるラベルは[[4]、[5]、[1]]のようなもので、各値は整数idに対応します。文字列ラベルがある場合は、label_keys引数を使用できます。

関連する問題