【问题标题】:Simple model gets 0.0 accuracy简单模型的精度为 0.0
【发布时间】:2017-07-07 04:10:20
【问题描述】:

我正在一个包含始终等于 0 的标签的数据集上训练一个简单模型,并且获得了 0.0 的准确度。

型号如下:

import csv
import numpy as np
import pandas as pd
import tensorflow as tf

labelsReader = pd.read_csv('data.csv',usecols = [12],header=None)
dataReader = pd.read_csv('data.csv',usecols = [1,2,3,4,5,6,7,8,9,10,11],header=None)

labels_ = labelsReader.values
data_ = dataReader.values

labels = np.float32(labels_)
data = np.float32(data_)

x = tf.placeholder(tf.float32, [None, 11])
W = tf.Variable(tf.truncated_normal([11, 1], stddev=1./11.))
b = tf.Variable(tf.zeros([1]))
y = tf.matmul(x, W) + b

# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 1])

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

sess = tf.InteractiveSession()
tf.global_variables_initializer().run()

for i in range(0, 1000):
    train_step.run(feed_dict={x: data, y_: labels})

correct_prediction = tf.equal(y, y_)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: data, y_: labels}))

这是数据集:

444444,0,0,0.9993089149965446,0,0,0.000691085003455425,0,0,0,0,0,0

随着模型的训练,上面显示的数据的 y 减小,在 1000 次迭代后达到 -1000。

训练模型失败的原因可能是什么?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    您的准确性检查预测的浮点数是否完全等于您的预期值。对于您创建的网络,这是一项非常艰巨的任务(尽管您可能有机会,因为您也过度拟合了数据)。

    为了获得更好的结果: - 将精度定义为高于/低于某个值(接近 1 或接近 0)。 - 规范化你的输入数据,我不知道你输入的范围,但是 444444 是一个可笑的值用作输入,而且很难训练可以处理这些值的权重。

    另外:尝试添加一些健全性检查。例如:您的模型预测的输出是什么? (y.eval)你在训练网络时的交叉熵是多少? (sess.run([accuracy,cross_entropy], feed_dict={x: data, y_: labels})

    祝你好运!

    【讨论】:

    • 谢谢你的回答,444444这个值实际上并没有使用,它不在“usecols”中。至于交叉熵,它始终为 0,准确度也是如此。该模型预测随着训练的进行而减少的负数。
    猜你喜欢
    • 2021-09-28
    • 2020-07-07
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多