TypeError: Can not convert a float32 into a Tensor or Operation.
阿新 • • 發佈:2018-12-24
錯誤
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就消失了