我正在使用Tensorflow 1.4.0& Windows 10上的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.
答案 0 :(得分:3)
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
?也许你甚至可能不需要这个操作。
答案 1 :(得分:0)
您可以做的一件事是使用无法变量的变量而不是常量:
X = tf.Variable(scaled_housing_data_plus_bias, dtype=tf.float64, name="X", trainable=False)
设置trainable=False
意味着TensorFlow不会尝试更改它以最小化您的成本函数。请注意,我需要将类型更改为float64
;你可能不需要。
但是,当它们仍然是Numpy数组时,将值标准化可能会更清晰,然后使用它来创建tf.constant
。