zoukankan      html  css  js  c++  java
  • 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…..但是也很有趣.

  • 相关阅读:
    Heap(堆)和stack(栈)有的区别是什么。
    i++和++i的深入理解
    JDBC之java数据库的连接与简单的sql语句执行
    java前三本基础知识总结
    数据库的一些基础
    SQL 同时查看2个表
    JMeter 问题
    Linux 常用命令
    java io (一)
    验证密码必须是字母加数字的组合
  • 原文地址:https://www.cnblogs.com/fonttian/p/7342388.html
Copyright © 2011-2022 走看看