自从一个星期以来,我正在使用python + tensorflow建立机器学习的知识。我的主要目标是启动和运行keras演示的教程,所以我自己对python的介绍是使这些加载功能正常工作,因为我被困在防火墙后面并且无法下载pip。 现在我遇到了一个问题,这使我失去了理智。 目前,我正在进行基本的回归分析,就像https://www.tensorflow.org/tutorials/keras/basic_text_classification一样-将整数转换回单词
稍作修改,其他所有教程都可以正常工作,但这使我发疯。
def get_word_index(path='training\imdb_word_index.json'):
with open('training\imdb_word_index.json') as f:
json1_str = f.read()
json1_data = json.loads(json1_str)
return dict(json1_data)
这段代码打开数据集,并将其作为字典返回。 内容如下:
"the":1402
就是这样。 我试图扭转它,因为内置功能似乎没有按预期工作。 现在我发现的最佳实践是 TypeError: unhashable type: 'list' when using built-in set function 这并没有太大帮助。 我的代码是
reverse_word_ind = {}
reverse_word_ind = dict.fromkeys(word_index.items(), 0)
这会引发错误:
TypeError:不可哈希类型:'set'
经过多次实验,将其手动翻转并进行类型转换以“指示”我的耐心失败了。 请帮助...
答案 0 :(得分:0)
您可以使用dict comprehension反转字典:
reverse_word_ind = {v:k for k,v in word_index.items()}
不是每个字典都可以颠倒。这是因为虽然对可以作为字典值的对象的类型没有任何限制,但有restrictions as to what types can be keys。
您得到的错误意味着字典中的至少一个值是一个集合,与您的期望相反。您可以通过在try...except
子句中进行字典反转来调试正在发生的情况并找出错误的值:
reverse_word_ind = {}
for k,v in word_index.items():
try:
reverse_word_ind[v] = k
except TypeError as e:
print('could not reverse pair (%s, %s) of types (%s, %s)' % (k, v, type(k), type(v)))
raise e
运行上面的代码应该会得到与之前相同的TypeError
,但是现在它将首先打印出一条有用的错误消息,指出字典中的错误值。