当前位置: 首页 > 知识库问答 >
问题:

Tensorflow-您必须用dtype float为占位符张量'x'提供一个值

钱欣然
2023-03-14
#!/usr/bin/env python3
import tensorflow as tf
import numpy as np
from sklearn.datasets import fetch_california_housing
import numpy.random as rnd

housing = fetch_california_housing()
m, n = (50000, 3)

n_epochs = 50000
learning_rate = 0.1

X = tf.placeholder(tf.float32, shape=(None, n + 1), name="X")
y = tf.placeholder(tf.float32, shape=(None, 1), name="y")
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0, seed=42), name="theta")
y_pred = tf.matmul(X, theta, name="predictions")
error = y_pred - y
mse = tf.reduce_mean(tf.square(error), name="mse")
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(mse)

init = tf.global_variables_initializer()

ans_theta = np.array([[4],[3],[2],[1]]).astype(np.float32)
X_train = rnd.rand(m, n + 1)
y_train = X_train.dot(ans_theta).reshape(m, 1)
print("ans_theta=%s" % (ans_theta.transpose()))
print("X_train=%s" % (X_train[0]))
print("Expect y=%s"  % (np.sum(X_train[0] * ans_theta.transpose())))
print("y_train=%s" % (y_train[0]))
def fetch_batch(epoch, batch_index, batch_size):
    rnd.seed(epoch * n_batches + batch_index)
    indices = rnd.randint(m, size=batch_size)
    X_batch = X_train[indices]
    y_batch = y_train[indices]
    return X_batch, y_batch

n_epochs = 500
batch_size = 2000
n_batches = int(np.ceil(m / batch_size))

with tf.Session() as sess:
    sess.run(init)

    for epoch in range(n_epochs):
    #    for batch_index in range(n_batches):
    #        X_batch, y_batch = fetch_batch(epoch, batch_index, batch_size)
            #print("X_batch(%s):\n%s\n" % (X_batch.shape, X_batch[:1]))
            #print("y_batch(%s):\n%s\n" % (y_batch.shape, y_batch[:1]))
    #        sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
        sess.run(training_op, feed_dict={X:X_train, y:y_train})
    best_theta = theta.eval()
    print("MSE=%s" % (mse.eval()))
print("Best theta:")
print(best_theta)

我也不知道为什么。如果删除行“print(”mse=%s“%(mse.eval()))”,那么一切都会好起来。有什么建议吗?

提前感谢!

共有1个答案

孔才
2023-03-14

您不能在没有任何数据的情况下计算MSE,您必须为占位符XY提供值,以计算网络对输入X的预测与Y中给出的基本真理标签之间的均方误差。

您可以使用

print("MSE=%s" % sess.run(mse, feed_dict={X:X_train, y:y_train}))

或者在训练的时候做:

_, mse_value = sess.run([training_op, mse], feed_dict={X:X_train, y:y_train})
print("MSE=%s" % mse_value)
 类似资料:
  • 我是tensorflow的新手,想训练一个用于分类的logistic模型。 feef_dict方法不起作用,complay:

  • 我使用如下所示的导出来服务我的模型: 然后,我发出以下POST请求(原始正文): {“错误”:“您必须用dtype float\n\t[[节点:Placeholder_1=placeholder_output_shapes=[],dtype=dt_float,shape=,_device=\”/job:localhost/replica:0/task:0/device:cpu:0\“]]为占位符张

  • 我有简单的seq2seq模型: 我正在尝试创建自己的度量标准: 如果我尝试用这个度量编译模型,我会得到一个错误“您必须为占位符张量提供一个值”,并显示以下消息: 但以下代码运行良好(不会产生任何异常): 你能解释一下那个例外是什么意思吗?我以为和在做同样的事情。我是NNs和keras的新手,所以我可能看不到一些明显的东西。我在stackoverflow上看到了类似的问题,但没有找到适合我情况的答案

  • 我试图在JUnit 5中开发一个参数化测试,如下例所示。 尝试运行测试导致异常: 您必须为此@ParameterizedTest提供至少一个参数 这个信息让我觉得,我做错了什么,不是吗? p、 我有一个假设,只有原语类型的参数可用。

  • 本文向大家介绍tensorflow从张量中提取一个切片,包括了tensorflow从张量中提取一个切片的使用技巧和注意事项,需要的朋友参考一下 示例 请参阅文档以获取详细信息。tf.slice(input, begin, size) 参数: input:张量 begin:每个维度的起始位置 input size:的每个维度的元素数input,使用-1包括所有剩余元素 块状切片: 使用负索引,检索第