• TypeError: Can not convert a float32 into a Tensor or Operation.


    错误

    TypeError: Can not convert a float32 into a Tensor or Operation.
    # 类型错误:不能将一个浮动32转换为一个张量或操作。
    
    TypeError: Fetch argument 2.3025854 has invalid type <class 'numpy.float32'>, must be a string or Tensor. (Can not convert a float32 into a Tensor or Operation.)
    

    如其意,类型错误:不能将一个浮动32转换为一个张量或操作。也就是在计算图实际运算的时候发生的错误,错误为数据类型错误,将应该是传入的张量或者操作的的地方传入了一个 float32 类型的数据.

    分析

    源码

          for step in range(1000):
                batch_xs, batch_ys = mnist.train.next_batch(100)
                _, Train_Loss = sess.run([Train_Step,Train_Loss], feed_dict={X: batch_xs, Y_true: batch_ys})
                print('Train step :',step,'Train_Losss :',Train_Loss)

    错误产生的时候我查了查代码,没明白什么意思,后来debug才发现,是变量在第二遍运行的时候数据类型发生了改变,
    变量的数据类型发生了改变

    其改变是在第一遍的时候,仔细看源代码,输出的Train_Loss与后面sess.run([Train_Step,Train_Loss], feed_dict={X: batch_xs, Y_true: batch_ys})中的’Train_Loss’同名,显然第一遍运行之后,原本应该传入session的Train_Loss就从张量变成了 float32

    解决方案

    避免重名,使用不同的名字
    如原来的

    _, Train_Loss = sess.run([Train_Step,Train_Loss], feed_dict={X: batch_xs, Y_true: batch_ys})

    改为

     _, train_loss = sess.run([Train_Step,Train_Loss], feed_dict={X: batch_xs, Y_true: batch_ys})

    BUG就消失了
    这是一个很低级的BUG…..但是也很有趣.

  • 相关阅读:
    浅谈Java中的==和equals
    Android下基于线程池的网络访问基础框架
    浅谈Android View滑动冲突
    Android View事件分发源码分析
    浅谈Android View事件分发机制
    Android弹性滑动的三种实现方式
    浅谈Android View滑动和弹性滑动
    浅谈Android View的定位
    web Form 表单method="get" method="post" 区别
    get与post的区别
  • 原文地址:https://www.cnblogs.com/fonttian/p/9162792.html
Copyright © 2020-2023  润新知