Tensorflow MNIST准确性计算不正确

我刚开始使用Tensorflow,正在尝试使用具有两个隐藏层和一个输出层的神经网络对MNIST数据集的图像进行分类,输出层使用softmax函数。我使用小批量梯度下降进行优化,并在每个epoch后跟踪最后一个小批量的准确性。

def fetch_batch(batch_index, batch_size, data=train_data, labels=train_labels):    low_ind = batch_index*batch_size    upp_ind = (batch_index+1)*batch_size    if upp_ind < data.shape[0]:        return data[low_ind:upp_ind], labels[low_ind:upp_ind]    else:        return data[low_ind:], labels[low_ind:]n_inputs = 28*28 # MNIST image sizen_hidden_1 = 300n_hidden_2 = 100n_outputs = 10 # ten different classeslearning_rate = 0.01X = tf.placeholder(tf.float32, shape=(None, n_inputs), name="X")y = tf.placeholder(tf.int64, shape=(None), name="y")with tf.name_scope("dnn"):    hidden_1 = tf.layers.dense(X, n_hidden_1, name="hidden_1", activation=tf.nn.relu)    hidden_2 = tf.layers.dense(hidden_1, n_hidden_2, name="hidden_2", activation=tf.nn.relu)    logits = tf.layers.dense(hidden_2, n_outputs, name="outputs")with tf.name_scope("loss"):    xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)    loss = tf.reduce_mean(xentropy, name="loss")with tf.name_scope("train"):    optimizer = tf.train.GradientDescentOptimizer(learning_rate)    training_op = optimizer.minimize(loss)with tf.name_scope("eval"):    correct = tf.nn.in_top_k(logits, y, 1)    accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))init = tf.global_variables_initializer()saver = tf.train.Saver()batch_size = 50n_epochs = 50m = train_data.shape[0]with tf.Session() as sess:    init.run()    for epoch in range(n_epochs):        for batch_index in range(m//batch_size):            X_minibatch, y_minibatch = fetch_batch(batch_index, batch_size)            #X_batch, y_batch = mnist.train.next_batch(batch_size)            sess.run(training_op, feed_dict={X: X_minibatch, y: y_minibatch})        acc_train = accuracy.eval(feed_dict={X: X_minibatch, y: y_minibatch})        acc_val = accuracy.eval(feed_dict={X: mnist.validation.images, y: mnist.validation.labels})        print(epoch, "Train accuracy: ", acc_train, " Val accuracy: ", acc_val)

使用MNIST帮助程序进行训练时,我得到了正确的准确性(即我用于验证准确性的那个),然而我想知道为什么我自己的实现不起作用,因为它总是输出0.0的准确性。我的数据的小批量形状和Tensorflow帮助程序的小批量形状是相同的。提前谢谢!


回答:

你需要对数据进行归一化,例如:

train_data = train_data / 255.0validation_data = validation_data / 255.0

如果你在谷歌搜索”为什么在机器学习中应该归一化数据“,你会发现为什么这很重要。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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