使用feature_column_lib.input_layer进行张量流训练

时间:2018-08-14 00:43:06

标签: tensorflow tensorflow-estimator


我正在尝试使用类似于DNNClassifier的输入层训练模型。
我使用了 feature_column_lib.input_layer ,这就是DNNClassifier构造其输入层的方式。

但是,当我尝试优化图形损失时出现错误。我觉得这与分类功能规范有关,当我删除分类功能时,它可以正常工作。有办法解决吗?

谢谢。

  tensorflow/core/framework/op_kernel.cc:1318] OP_REQUIRES failed at sparse_to_dense_op.cc:126 : Invalid argument: indices[1] = [1,0] is out of bounds: need 0 <= index < [1,1]
Traceback (most recent call last):
  File "tf_exp.py", line 120, in <module>
    print sess.run(loss)
  File "lib/python2.7/site-packages/tensorflow/python/client/session.py", line 900, in run
    run_metadata_ptr)
  File "lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1135, in _run
    feed_dict_tensor, options, run_metadata)
  File "lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1316, in _do_run
    run_metadata)
  File "lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1335, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: indices[1] = [1,0] is out of bounds: need 0 <= index < [1,1]
     [[Node: input_layer/a4_indicator/SparseToDense = SparseToDense[T=DT_INT64, Tindices=DT_INT64, validate_indices=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](input_layer/a4_indicator/to_sparse_input/indices, input_layer/a4_indicator/to_sparse_input/dense_shape, input_layer/a4_indicator/Select, input_layer/a4_indicator/SparseToDense/default_value)]]

Caused by op u'input_layer/a4_indicator/SparseToDense', defined at:
  File "tf_exp.py", line 102, in <module>
    features=features, feature_columns=feature_columns)
  File "lib/python2.7/site-packages/tensorflow/python/feature_column/feature_column.py", line 277, in input_layer
    trainable, cols_to_vars)
  File "lib/python2.7/site-packages/tensorflow/python/feature_column/feature_column.py", line 202, in _internal_input_layer
    trainable=trainable)
  File "lib/python2.7/site-packages/tensorflow/python/feature_column/feature_column.py", line 3332, in _get_dense_tensor
    return inputs.get(self)
  File "lib/python2.7/site-packages/tensorflow/python/feature_column/feature_column.py", line 2175, in get
    transformed = column._transform_feature(self)  # pylint: disable=protected-access
  File "lib/python2.7/site-packages/tensorflow/python/feature_column/feature_column.py", line 3277, in _transform_feature
    id_tensor, default_value=-1)
  File "lib/python2.7/site-packages/tensorflow/python/ops/sparse_ops.py", line 996, in sparse_tensor_to_dense
    name=name)
  File "lib/python2.7/site-packages/tensorflow/python/ops/sparse_ops.py", line 776, in sparse_to_dense
    name=name)
  File "lib/python2.7/site-packages/tensorflow/python/ops/gen_sparse_ops.py", line 2824, in sparse_to_dense
    name=name)
  File "lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 3414, in create_op
    op_def=op_def)
  File "lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1740, in __init__
    self._traceback = self._graph._extract_stack()  # pylint: disable=protected-access

InvalidArgumentError (see above for traceback): indices[1] = [1,0] is out of bounds: need 0 <= index < [1,1]
     [[Node: input_layer/a4_indicator/SparseToDense = SparseToDense[T=DT_INT64, Tindices=DT_INT64, validate_indices=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](input_layer/a4_indicator/to_sparse_input/indices, input_layer/a4_indicator/to_sparse_input/dense_shape, input_layer/a4_indicator/Select, input_layer/a4_indicator/SparseToDense/default_value)]]

这是我的程序

dataset = tf.data.TextLineDataset('test_input.txt')
dataset = dataset.shuffle(5)
dataset = dataset.batch(5)
dataset = dataset.repeat(configs.get('epochs',10))
train_data_iterator = dataset.make_one_shot_iterator()
features, labels= _parse_example(train_data_iterator.get_next())
feature_columns = []
feature_columns.append(tf.feature_column.numeric_column(key='f0', dtype=tf.float32))
feature_columns.append(tf.feature_column.numeric_column(key='f1', dtype=tf.float32))
feature_columns.append(tf.feature_column.numeric_column(key='f2', dtype=tf.float32))
feature_columns.append(tf.feature_column.numeric_column(key='f3', dtype=tf.float32))
feature_columns.append(tf.feature_column.indicator_column(
                tf.feature_column.categorical_column_with_identity(key='a4', num_buckets=11,
                                                                   default_value=0)))

input_layer = feature_column_lib.input_layer(
            features=features, feature_columns=feature_columns)

logits = tf.layers.dense(inputs=input_layer, units=1)
loss = tf.reduce_mean(
      tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits))

optimizer = tf.train.GradientDescentOptimizer(0.001).minimize(loss, global_step = global_step)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print sess.run(loss)

1 个答案:

答案 0 :(得分:0)

弄清楚了,真正的问题是标签尺寸与logit不匹配。