【问题标题】:MNIST with Tensorflow, ValueErrorMNIST 与 TensorFlow,ValueError
【发布时间】:2018-02-19 13:51:17
【问题描述】:

我正在尝试使用 Tensorflow 运行 MNIST 数据集。这是我的代码

import tensorflow as tf
import numpy as np

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)

X_train = np.array(mnist.train.images, 'float')
X_test = np.array(mnist.test.images, 'float')
y_train = np.array(mnist.train.images, 'int32')
y_test = np.array(mnist.test.images, 'int32')

# Specify feature
feature_columns = [tf.contrib.layers.real_valued_column('', dimension=784)]

# Build 3 layer DNN with 10, 20, 10 units respectively.
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns, 
                                            hidden_units=[200, 100, 60, 30], 
                                            n_classes=10,
                                            model_dir="./output"
                                            )

# Fit model.
classifier.fit(X_train, y_train, batch_size=100, steps=1000)

# Evaluate accuracy.
accuracy_score = classifier.evaluate(X_test, y_test)["accuracy"]

print('Accuracy: {0:f}'.format(accuracy_score))

但是,我不断收到错误消息:

ValueError: 无法挤压 dim[1],预期维度为 1,得到 784 对于“dnn/multi_class_head/softmax_cross_entropy_loss/Squeeze”(操作: 'Squeeze') 输入形状:[?,784]。

回溯让我注意到第 31 行,这是我在分类器上调用 fit() 的地方,但我不知道为什么。

【问题讨论】:

  • 需要指出的一点:标签 (y_xxxx) 应该在 mnist.[train|test].labels 中,而不是 mnist.[train|test].images 中
  • 谢谢。这是我在尝试不同的事情时犯的复制和粘贴错误。我已经更正了,但它仍然没有解决错误......但是,我现在得到一个稍微不同的错误,说预期 1,得到 10。

标签: python tensorflow mnist


【解决方案1】:

这应该可以正常工作 tf.version = '1.1.0' 并使用 python 3.6。您的输入数据的维度可能存在一些问题,但请从这里开始。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np

mnist_data = "save/here/mnist"

MNIST_DATASET = input_data.read_data_sets(mnist_data)

train_data = np.array(MNIST_DATASET.train.images, 'float32')
train_target = np.array(MNIST_DATASET.train.labels, 'int64')

test_data = np.array(MNIST_DATASET.test.images, 'float32')
test_target = np.array(MNIST_DATASET.test.labels, 'int64')

feature_columns = [tf.contrib.layers.real_valued_column("", dimension=784)]

classifier = tf.contrib.learn.DNNClassifier(
    feature_columns=feature_columns
    ,n_classes=10
    ,hidden_units=[128, 32]
)

classifier.fit(train_data, train_target, steps=5)
accuracy_score = classifier.evaluate(test_data, test_target, steps=5)['accuracy']
print("accuracy: ", 100*accuracy_score,"%")

输出:

WARNING:tensorflow:Skipping summary for global_step, must be a float or np.float32.
accuracy:  44.3899989128 %

【讨论】:

  • 好的,看来问题出在我在读取数据时输入的“one_hot=True”调用上。感谢您的帮助!
  • 另外,对于运行上述代码的任何人,作为警告,如果您显着增加步骤数,您可能希望将 batch_size = 100 添加到 classifier.fit() 中,因为它会为您节省大量时间。在大约 45 秒内使用 batch_size=100 和 Steps = 5000,您可以获得 +/-98% 的准确度
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 2018-02-23
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多