TensorFlow 报错:unhashable type: 'numpy.ndarray' error

在TensorFlow运行计算图的过程中,sess.run()那行可能会出现报错 unhashable type: 'numpy.ndarray' error 大致意思为不可哈希的类型 问题出现在feed_dict 里面。、

解决方法 1:

  在启动sess并给placeholeder喂数据后报错:TypeError: unhashable type: 'numpy.ndarray'。 这是由于变量名与占位符名冲突导致的,看到莫名其妙的TypeError要考虑是否存在变量名重复。 

解决方法2:

我们知道,feed_dict 参数一般存放占位符placeholder 所指向的具体的数据,以字典方式存储。而Python中字典的key和value类型是有限制的,并不是所有类型都能充当字典中的key和value。 所以此处的问题就是在存储在feed_dict中的键或值出了问题,一般key设置为placeholder ,新手在使用的时候可能会在key上面出现问题,注意排查一下就好。

但是除了以上说的那个问题以外,其他有可能出现的情况是placeholder 和真实数据的类型不一样,比如placeholder 为tf.int32,而真实数据为np.int64 ,这里需要将所对应的类型设为一致。不一致有可能会导致以上问题。参考链接: https://stackoverflow.com/questions/43081403/unhashable-type-numpy-ndarray-error-in-tensorflow ps:

顺带简要复习一下Python字典的特点

1.健必须是可散列的,即不可变 用户自己实现的对象默认都是可散列的,因为id()不同。一个可散列对象应该有以下属性: 支持hash()函数,通过hash()方法得到的散列值是不变的。 Python的基本类型如字符串、整数、浮点数还有元组都是不可变的,都可以作为 key(list类型不可以)。

2.字典内存开销大,但访问速度快 因为字典是由散列表实现的,散列表中肯定对出现一些稀疏,这就导致了字典会占用一些空间。当然和字典的速度相比这点内存是可以忽略的。 3.字典的健顺序不是唯一的 由于散列表在插入或者读取时候可能会产生散列冲突,这就导致了字典中健的顺序不是唯一的,但是不管字典健的顺序怎么变,如果两个字典健值对都一样那么这两个字典都是相等的 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值