如何在张量流中将dict转换为张量

时间:2017-09-05 10:23:32

标签: python tensorflow sparse-matrix

我正在关注张量流的教程:https://www.tensorflow.org/tutorials/wide

有很多分类特征必须用tf.feature_column.categorical_column_with_vocabulary_list()转换为稀疏矩阵。

但是,我不想使用预定义的Estimator,

m = tf.estimator.LinearClassifier(
    model_dir=model_dir, feature_columns=base_columns + crossed_columns)

我更喜欢使用服装的NN模型:

estimator = tf.contrib.learn.Estimator(model_fn=model)
estimator.fit(input_fn=input_fn(df, num_epochs=100, shuffle=True), \ 
              steps=100)

所以在model()中,会有

 def model(features, labels, mode): 
    ...
    node = tf.add(tf.matmul(features, w), b)
    ...

然后,我得到了错误:

 TypeError: Failed to convert object of type <class 'dict'> to Tensor.
 Contents: {'education': <tf.Tensor
 'random_shuffle_queue_DequeueUpTo:1' shape=(?,) dtype=string>, 'age':
 <tf.Tensor 'random_shuffle_queue_DequeueUpTo:2' shape=(?,) dtype=float64> ... 

我的问题是如何将features转换为可用作输入的张量。

希望我已经清楚地描述了这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

功能是Tensor的一个词,你可以像Tensor那样获得features['education'],但这个Tensor仍然是string的类型,它仍然可以&# 39;要使用tf.add(tf.matmul(features, w), b),您应该将字符串类型功能处理为数字功能,例如tf.feature_column.categorical_column_with_vocabulary_list()

更新

您可以在def dnn_logit_fn部分检查官方dnn implementation,使用feature_column_lib.input_layerfeaturescolumns生成输入图层,{{1}是columns的列表。

在定义诸如tf.feature_columns.*的{​​{1}}时,它接受tf.feature_columns.*中必须存在的字符串作为第一个参数,它将张量从tf.feature_column.categorical_column_with_vocabulary_list()连接到feature_column告诉如何将原始输入(字符串)张量处理成特征张量(数字)。