2017-04-25 63 views
3

我一直在研究Tensorflow一段时间,但是我似乎无法弄清楚的一件事是如何在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或任何其他方法。但是如何使用tensflow编码该变量,以便tf.contrib.learn可以接受它。

我试图为目标列的代码更改为以下:

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

DNNClassifier支持标签作为张量没有稀疏。期望的标签类似于[[4],[5],[1]],其中每个值对应于整数id。如果您有字符串标签,则可以使用label_keys参数。