Tensorflow:值错误找到列的重复功能列键

2024-10-03 04:34:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Tensorflow和Follow把我的手弄脏 Wide and Deep Learning示例代码。将python导入到特定的centos上。在

这些变化的亮点包括:

    -import urllib
    +import urllib.request

。。。在

^{pr2}$

。。。在

在运行代码时,我得到以下错误

    Training data is downloaded to /tmp/tmpw06u4_xl
    Test data is downloaded to /tmp/tmpjliqxhwh
    model directory = /tmp/tmpcyll7kck
    WARNING:tensorflow:Setting feature info to {'education': TensorSignature(dtype=tf.string, shape=None, is_sparse=True), 'capital_gain': TensorSignature(dtype=tf.int64, shape=TensorShape([Dimension(32561)]), is_sparse=False), 'capital_loss': TensorSignature(dtype=tf.int64, shape=TensorShape([Dimension(32561)]), is_sparse=False), 'hours_per_week': TensorSignature(dtype=tf.int64, shape=TensorShape([Dimension(32561)]), is_sparse=False), 'gender': TensorSignature(dtype=tf.string, shape=None, is_sparse=True), 'occupation': TensorSignature(dtype=tf.string, shape=None, is_sparse=True), 'native_country': TensorSignature(dtype=tf.string, shape=None, is_sparse=True), 'race': TensorSignature(dtype=tf.string, shape=None, is_sparse=True), 'age': TensorSignature(dtype=tf.int64, shape=TensorShape([Dimension(32561)]), is_sparse=False), 'education_num': TensorSignature(dtype=tf.int64, shape=TensorShape([Dimension(32561)]), is_sparse=False), 'marital_status': TensorSignature(dtype=tf.string, shape=None, is_sparse=True), 'workclass': TensorSignature(dtype=tf.string, shape=None, is_sparse=True), 'relationship': TensorSignature(dtype=tf.string, shape=None, is_sparse=True)}
    WARNING:tensorflow:Setting targets info to TensorSignature(dtype=tf.int64, shape=TensorShape([Dimension(32561)]), is_sparse=False)
    Traceback (most recent call last):
      File "wide_n_deep_tutorial.py", line 213, in <module>
        tf.app.run()
      File "/usr/lib/python3.4/site-packages/tensorflow/python/platform/app.py", line 30, in run
        sys.exit(main(sys.argv))
      File "wide_n_deep_tutorial.py", line 209, in main
        train_and_eval()
      File "wide_n_deep_tutorial.py", line 202, in train_and_eval
        m.fit(input_fn=lambda: input_fn(df_train), steps=FLAGS.train_steps)
      File "/usr/lib/python3.4/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 240, in fit
        max_steps=max_steps)
      File "/usr/lib/python3.4/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py", line 550, in _train_model
        train_op, loss_op = self._get_train_ops(features, targets)
      File "/usr/lib/python3.4/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py", line 182, in _get_train_ops
        logits = self._logits(features, is_training=True)
      File "/usr/lib/python3.4/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py", line 260, in _logits
        dnn_feature_columns = self._get_dnn_feature_columns()
      File "/usr/lib/python3.4/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py", line 224, in _get_dnn_feature_columns
        feature_column_ops.check_feature_columns(self._dnn_feature_columns)
      File "/usr/lib/python3.4/site-packages/tensorflow/contrib/layers/python/layers/feature_column_ops.py", line 318, in check_feature_columns
        f.name))
    ValueError: Duplicate feature column key found for column: education_embedding. This usually means that the column is almost identical to another column, and one must be discarded.

是我改变了一些变量,还是这是python3的问题。我如何继续学习本教程。在


Tags: inpytruestringistftensorflowline
2条回答

首先,正如Jesse建议的那样,当您从tensorflow网站下载教程源代码时,使用master(git clone上没有分支)。 其次,只需要将前两个参数传递给类。您将在途中收到一些警告;请忽略它们并等待程序完成。 因此,在教程源代码的基础上使用以下代码:或下载 从此处修改的代码:Modified Version

from tensorflow.contrib.layers.python.layers.feature_column import _EmbeddingColumn

class _MonkeyEmbeddingColumn(_EmbeddingColumn):
  # override the key property
  @property
  def key(self):
    return "{}".format(self)

def monkey_embedding_column(sparse_id_column,
                     dimension,
                     combiner="mean",
                     initializer=None,
                     ckpt_to_load_from=None,
                     tensor_name_in_ckpt=None):
  return _MonkeyEmbeddingColumn(sparse_id_column, dimension)

最终更新我在推荐的0.10rc0分支中遇到了这个问题,但是在使用主服务器(git clone上没有分支)重新安装之后,这个问题就消失了。我检查了源代码,他们修复了它。在修复了urllib.请求你已经提到了。在

对于以后仍在使用0.10rc0分支的用户,请继续阅读:

有同样的问题,并做了一些调试。看起来像是tensorflow/contrib/layers/python/layers/feature中的bug_列.py在\u EmbeddingColumn类中。key(self)属性受到此错误的困扰: https://bugs.python.org/issue24931

因此,我们没有给出一个很好的唯一键,而是为所有的嵌入列实例获得以下键: ''u EmbeddingColumn()'

这将导致feature_列_操作py的check_feature_columns()函数,以确定第二个\u EmbeddingColumn实例是重复的,因为它们的键都是相同的。在

我有点像一个Python呆子,我不知道如何用猴子修补一个属性。因此,我通过在wide_n_deep教程文件的顶部创建一个子类来解决此问题:

# EmbeddingColumn for Python 3.4 has a problem with key property
# can't monkey patch a property, so subclass it and make a method to create the 
# subclass to use instead of "embedding_column"
from tensorflow.contrib.layers.python.layers.feature_column import _EmbeddingColumn
class _MonkeyEmbeddingColumn(_EmbeddingColumn):
  # override the key property
  @property
  def key(self):
    return "{}".format(self)

def monkey_embedding_column(sparse_id_column,
                     dimension,
                     combiner="mean",
                     initializer=None,
                     ckpt_to_load_from=None,
                     tensor_name_in_ckpt=None):
  return _MonkeyEmbeddingColumn(sparse_id_column, dimension, combiner, initializer, ckpt_to_load_from, tensor_name_in_ckpt)

然后找到这样的电话:

^{pr2}$

并替换“tf.contrib.layers公司“.”和“猴子”一起,所以你现在有了:

  deep_columns = [
      monkey_embedding_column(workclass, dimension=8),
      monkey_embedding_column(education, dimension=8),
      monkey_embedding_column(marital_status,
                                         dimension=8),
      monkey_embedding_column(gender, dimension=8),
      monkey_embedding_column(relationship, dimension=8),
      monkey_embedding_column(race, dimension=8),
      monkey_embedding_column(native_country,
                                         dimension=8),
      monkey_embedding_column(occupation, dimension=8),
      age,
      education_num,
      capital_gain,
      capital_loss,
      hours_per_week,
  ]

所以现在它使用monkeyembdingColumn类和修改后的key属性(工作方式与feature中的所有其他key属性一样)_列.py). 这让代码运行到完成,但我不能100%确定它是正确的,因为它报告的准确性为:

accuracy: 0.818316

由于这比wide-only训练稍微差一点,我想知道它在python2中是否有这样的准确性,或者我的修复是否通过导致训练问题而降低了精确度。在

Update我安装在Python2中,广域深度的精确度超过0.85,所以这个“修复”允许代码运行,但似乎做了错误的事情。我将调试并查看Python2为这些值得到了什么,并查看是否可以在Python3中正确地修复它。我也很好奇。在

相关问题 更多 >