问题 TensorFlow 0.12教程产生警告:“输入Tensor的等级应与列的output_rank相同


我有一些在python中编写机器学习程序的经验,但我是TensorFlow的新手并正在检查它。我的开发环境是一个lubuntu 14.04 64位虚拟机。我从miniconda创建了一个python 3.5 conda环境并安装了TensorFlow 0.12及其依赖项。我开始尝试从TensorFlow的教程中运行一些示例代码,并在调用时遇到此警告 fit() 在输入函数的boston.py示例中: 资源

警告:tensorflow:输入的等级Tensor(1)应该与   列的output_rank(2)。将尝试扩大dims。这是非常高的   建议您调整输入的大小,因为此行为可能会更改。

在谷歌搜索后,我发现其他人遇到了同样的警告:

但是,他们也遇到了阻止代码执行完成的错误。在我的例子中,代码执行上面的警告。不幸的是,我在这些链接中找不到关于导致警告的原因以及如何修复警告的单一答案。他们都专注于错误。如何删除警告?或者警告可以安全忽略吗?

干杯!

额外信息,我在运行上述boston.py示例时也会看到以下警告。

警告:tensorflow:************ *********   警告:tensorflow:TensorFlow的V1检查点格式已经存在   弃用。警告:tensorflow:考虑切换到更多   高效的V2格式:警告:张量流:
  'tf.train.Saver(write_version = tf.train.SaverDef.V2)'   警告:tensorflow:默认情况下已启用。   警告:tensorflow:************ *********

警告:tensorflow:从   /home/kade/miniconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:1053   在预测中:调用BaseEstimator.predict(来自   tensorflow.contrib.learn.python.learn.estimators.estimator)x是   已弃用,将在2016-12-01之后删除。说明   更新:Estimator通过移动与Scikit Learn界面分离   分成SKCompat类。参数x,y和batch_size仅为   在SKCompat类中,Estimator只接受input_fn。   转换示例:est = Estimator(...) - > est =   SKCompat(估计(...))

更新(2016-12-22): 我已跟踪此文件的警告: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/layers/python/layers/feature_column_ops.py

这个代码块:

except NotImplementedError:
    with variable_scope.variable_scope(
        None,
        default_name=column.name,
        values=columns_to_tensors.values()):
      tensor = column._to_dense_tensor(transformed_tensor)
      tensor = fc._reshape_real_valued_tensor(tensor, 2, column.name)
      variable = [
          contrib_variables.model_variable(
              name='weight',
              shape=[tensor.get_shape()[1], num_outputs],
              initializer=init_ops.zeros_initializer(),
              trainable=trainable,
              collections=weight_collections)
      ]
      predictions = math_ops.matmul(tensor, variable[0], name='matmul')

注意这一行: tensor = fc._reshape_real_valued_tensor(tensor, 2, column.name)

方法签名是: _reshape_real_valued_tensor(input_tensor, output_rank, column_name=None)

价值 2被硬编码为output_rank的值,但是boston.py示例传入了一个 input_tensor 排名1.我会继续调查。


5541
2017-12-21 22:45


起源

我的一些代码面临同样的问题。任何时候 real_valued_column 被添加到功能列中,它会抛出此警告。 @TheTravelingCoder你认为这个硬编码的值是错误/错误吗? - wspeirs
@wspeirs我继续调查这些警告。使用我自己使用的数据集,我非常有信心可以安全地忽略警告。尽管有警告,但我通过模型训练得到的结果看似准确。因此,我怀疑TensorFlow代码库非常原始。我希望更多地调查源代码以回应我自己的问题。如果你像我一样,并想要隐藏警告,你可以在contrib / layers / python / layers / feature_column.py中注释掉这一行。搜索:if output_rank == input_rank + 1:,你会在1230行找到一个logging.warning()。 - The Traveling Coder


答案:


如果明确指定张量的形状:

tf.constant(df[k].values, shape=[df[k].size, 1]) 

警告应该消失。


11
2018-02-12 20:56





在我明确指定张量的形状之后。

continuous_cols = {k: tf.constant(df[k].values, shape=[df[k].size, 1]) for k in CONTINUOUS_COLUMNS}

有用!


0
2018-03-31 08:14