我正在使用Tensorflow及其tf.learn API来创建和训练一个DNNRegressor模型。我有一个多值的整数特征列(每一行可以有多个整数值),我使用tf.contrib.layers.sparse_column_with_integerized_feature来处理这个特征列。
现在我的问题是,在CSV文件中,对于多值特征列应该使用什么分隔符作为正确的分隔符。例如,假设我有一个CSV文件,其中col2是多值特征,并且不是独热编码特征:
1, 2, 1:2:3:4, 5 2, 1, 4:5, 6
如你所见,我使用’:’来分隔col2中的整数特征值,但这似乎不对,因为在使用tf.contrib.layers.sparse_column_with_integerized_feature声明这个特征列运行DNNRegressor时,我得到了以下错误:
'Value passed to parameter 'x' has DataType string not in list of allowed values: int32, int64, float32, float64'.
非常感谢你的帮助
回答:
tf.contrib.layers.sparse_column_with_integerized_feature
仅适用于int32
或int64
值,因此不能完全按照你希望的方式工作。
但是,tensorflow
支持数值列中的多维度,因此你可以使用tf.feature_column.numeric_column
并指定你拥有的shape
。请注意,tensorflow期望所有这些形状都是相同的,因此你需要将所有值填充到一个共同的形状。
对于多值列,使用冒号':'
作为分隔符是可以的,这里有一个例子说明如何使用pandas将多个值读取到DataFrame
中(问题是关于XML的,但对于CSV也适用)。你可以将这个数据框传递到model.train()
函数的input_fn
中。