<p><strong>最终更新</strong>我在推荐的0.10rc0分支中遇到了这个问题,但是在使用主服务器(git clone上没有分支)重新安装之后,这个问题就消失了。我检查了源代码,他们修复了它。在修复了urllib.请求你已经提到了。在</p>
<p>对于以后仍在使用0.10rc0分支的用户,请继续阅读:</p>
<p>有同样的问题,并做了一些调试。看起来像是tensorflow/contrib/layers/python/layers/feature中的bug_列.py在\u EmbeddingColumn类中。key(self)属性受到此错误的困扰:
<a href="https://bugs.python.org/issue24931" rel="nofollow">https://bugs.python.org/issue24931</a></p>
<p>因此,我们没有给出一个很好的唯一键,而是为所有的嵌入列实例获得以下键:
''u EmbeddingColumn()'</p>
<p>这将导致feature_列_操作py的check_feature_columns()函数,以确定第二个\u EmbeddingColumn实例是重复的,因为它们的键都是相同的。在</p>
<p>我有点像一个Python呆子,我不知道如何用猴子修补一个属性。因此,我通过在wide_n_deep教程文件的顶部创建一个子类来解决此问题:</p>
<pre><code># 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)
</code></pre>
<p>然后找到这样的电话:</p>
^{pr2}$
<p>并替换“tf.contrib.layers公司“.”和“猴子”一起,所以你现在有了:</p>
<pre><code> 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,
]
</code></pre>
<p>所以现在它使用monkeyembdingColumn类和修改后的key属性(工作方式与feature中的所有其他key属性一样)_列.py). 这让代码运行到完成,但我不能100%确定它是正确的,因为它报告的准确性为:</p>
<pre><code>accuracy: 0.818316
</code></pre>
<p>由于这比wide-only训练稍微差一点,我想知道它在python2中是否有这样的准确性,或者我的修复是否通过导致训练问题而降低了精确度。在</p>
<p><strong>Update</strong>我安装在Python2中,广域深度的精确度超过0.85,所以这个“修复”允许代码运行,但似乎做了错误的事情。我将调试并查看Python2为这些值得到了什么,并查看是否可以在Python3中正确地修复它。我也很好奇。在</p>