我正在关注张量流的教程: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
转换为可用作输入的张量。
希望我已经清楚地描述了这个问题。提前谢谢。
答案 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_layer
从features
和columns
生成输入图层,{{1}是columns
的列表。
在定义诸如tf.feature_columns.*
的{{1}}时,它接受tf.feature_columns.*
中必须存在的字符串作为第一个参数,它将张量从tf.feature_column.categorical_column_with_vocabulary_list()
连接到feature_column告诉如何将原始输入(字符串)张量处理成特征张量(数字)。