TypeError:预期的 float32,得到的列表包含类型为“_Message”的张量
Posted
技术标签:
【中文标题】TypeError:预期的 float32,得到的列表包含类型为“_Message”的张量【英文标题】:TypeError: Expected float32, got list containing Tensors of type '_Message' instead 【发布时间】:2018-05-08 11:29:22 【问题描述】:我在 Windows 10 上使用 Tensorflow 1.4.0 和 Python 3.6。 我查看了有关值排序的其他帖子,但到目前为止没有发现任何有用的信息。
谢谢。
import tensorflow as tf
import numpy as np
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
m, n = housing.data.shape
housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data]
#normalization
scaled_housing_data_plus_bias = tf.nn.l2_normalize(housing_data_plus_bias, 1, epsilon=1e-12,name="Normalized")
n_epochs = 1000
learning_rate = 0.01
#error occurs here
X = tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name="X")
Traceback (most recent call last):
File "C:/Users/tony/PycharmProjects/NNCourse/Hands-On_Book_5.py", line 14, in <module>
X = tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name="X")
File "C:\Users\tony\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\constant_op.py", line 208, in constant
value, dtype=dtype, shape=shape, verify_shape=verify_shape))
File "C:\Users\tony\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\tensor_util.py", line 383, in make_tensor_proto
_AssertCompatible(values, dtype)
File "C:\Users\tony\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\tensor_util.py", line 303, in _AssertCompatible
(dtype.name, repr(mismatch), type(mismatch).__name__))
TypeError: Expected float32, got list containing Tensors of type '_Message' instead.
【问题讨论】:
【参考方案1】:您可以做的一件事是使用不可训练的变量而不是常量:
X = tf.Variable(scaled_housing_data_plus_bias, dtype=tf.float64, name="X", trainable=False)
设置 trainable=False
意味着 TensorFlow 不会尝试更改它以最小化您的成本函数。请注意,我需要将类型更改为float64
;你可能不需要。
但是,当它们仍然是一个 Numpy 数组时,标准化这些值可能会更干净,然后使用它来创建 tf.constant
。
【讨论】:
【参考方案2】:tf.constant 在其value
参数中接受常量值或列表。您正在做的是向它提供tensor
,这是不可能的。
考虑下面的例子,你会得到类似的错误:
y = tf.ones((2,2))
x_c = tf.constant(y, dtype = tf.float32)
错误:
TypeError: Expected float32, got list containing Tensors of type '_Message' instead.
要解决这个问题,请检查您为什么真的要将张量转换为constant
?也许你甚至可能一开始就不需要这个操作。
【讨论】:
以上是关于TypeError:预期的 float32,得到的列表包含类型为“_Message”的张量的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:“float32”类型的对象不是 JSON 可序列化的 [重复]
TypeError:“numpy.float32”类型的对象没有 len()
TypeError:“Mul”Op 的输入“y”的类型为 float32,与参数“x”的类型 int32 不匹配
TypeError: Input ‘filter‘ of ‘Conv2D‘ Op has type float32 that does not match type float64 of argume
TypeError:参数“x”的类型不正确(预期为cupy.core.core.ndarray,得到了numpy.ndarray)