Tensorflow- 如何显示线性回归模型的准确率

我有一个似乎工作正常的线性回归模型。我首先将data加载到X中,并将目标列加载到Y中,之后我实现了以下代码…

X_train, X_test, Y_train, Y_test = train_test_split(    X_data,     Y_data,     test_size=0.2)rng = np.randomn_rows = X_train.shape[0]X = tf.placeholder("float")Y = tf.placeholder("float")W = tf.Variable(rng.randn(), name="weight")b = tf.Variable(rng.randn(), name="bias")pred = tf.add(tf.multiply(X, W), b)cost = tf.reduce_sum(tf.pow(pred-Y, 2)/(2*n_rows))optimizer = tf.train.GradientDescentOptimizer(FLAGS.learning_rate).minimize(cost)init = tf.global_variables_initializer()init_local = tf.local_variables_initializer()with tf.Session() as sess:    sess.run([init, init_local])    for epoch in range(FLAGS.training_epochs):        avg_cost = 0        for (x, y) in zip(X_train, Y_train):            sess.run(optimizer, feed_dict={X:x, Y:y})        # 每轮显示日志        if (epoch + 1) % FLAGS.display_step == 0:            c = sess.run(                cost,                 feed_dict={X:X_train, Y:Y_train}            )            print("Epoch:", '%04d' % (epoch + 1), "cost=", "{:.9f}".format(c))    print("优化完成!")    accuracy, accuracy_op = tf.metrics.accuracy(labels=tf.argmax(Y_test, 0), predictions=tf.argmax(pred, 0))    print(sess.run(accuracy))

我不知道如何打印模型的准确率。例如,在sklearn中,这很简单,如果你有一个模型,你只需打印model.score(X_test, Y_test)。但我不知道如何在tensorflow中做到这一点,或者这是否可能。

我想我可以计算均方误差。这有帮助吗?

编辑

我尝试按照评论中的建议实现tf.metrics.accuracy,但在实现过程中遇到了问题。文档说它需要两个参数,labelspredictions,所以我尝试了以下代码…

accuracy, accuracy_op = tf.metrics.accuracy(labels=tf.argmax(Y_test, 0), predictions=tf.argmax(pred, 0))print(sess.run(accuracy))

但这会导致错误…

FailedPreconditionError(参见上面的跟踪):尝试使用未初始化的值accuracy/count [[Node: accuracy/count/read = IdentityT=DT_FLOAT, _class=[“loc:@accuracy/count”], _device=”/job:localhost/replica:0/task:0/device:CPU:0″]]

这到底该如何实现?


回答:

在阅读了您发布的完整代码后,我注意到了一些其他问题:

  • 在计算pred时,您使用了pred = tf.add(tf.multiply(X, W), b)tf.multiply执行逐元素乘法,不会为您提供神经网络所需的全连接层(我假设这是您最终的目标,因为您使用的是TensorFlow)。要实现全连接层,其中每层i(包括输入和输出层)有ni个节点,您需要为每一对连续层提供单独的权重和偏置矩阵。第i个权重矩阵(i层与i+1层之间的权重)的维度应为(ni,ni + 1),第i个偏置矩阵的维度应为(ni + 1,1)。然后,回到乘法操作 – 将tf.multiply替换为tf.matmul,您就可以了。我认为您现在的设置对于单类线性回归问题可能没问题,但如果您计划解决多类回归问题或实现更深的网络,这绝对是您想要的方式。
  • 您的权重和偏置张量的形状为(1, 1)。您为变量提供了np.random.randn()的初始值,根据文档,当没有提供参数时,会生成一个浮点数。您的权重和偏置张量的维度需要作为参数提供给np.random.randn()。更好的是,您实际上可以在Tensorflow中将这些初始化为随机值:W = tf.Variable(tf.random_normal([dim0, dim1], seed = seed)(我总是使用种子值初始化随机变量以确保可重复性)
  • 仅供参考,如果您还不知道这一点,但神经网络要有效,需要非线性激活函数。如果所有激活都是线性的,那么无论您有多少层,最终都会简化为简单的线性回归。许多人对隐藏层使用relu激活。对于输出层,对于输出类别互斥的多类分类问题(即,对于任何给定输入只能有一个正确类别),使用softmax激活,对于输出类别不互斥的多类分类问题,使用sigmoid激活。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注