我正在使用深度神经网络分类器研究TensorFlow上的MNIST数据集。我正在使用以下网络结构。
MNIST_DATASET = input_data.read_data_sets(mnist_data_path)
train_data = np.array(MNIST_DATASET.train.images, 'int64')
train_target = np.array(MNIST_DATASET.train.labels, 'int64')
test_data = np.array(MNIST_DATASET.test.images, 'int64')
test_target = np.array(MNIST_DATASET.test.labels, 'int64')
classifier = tf.contrib.learn.DNNClassifier(
feature_columns=[tf.contrib.layers.real_valued_column("", dimension=784)],
n_classes=10, #0 to 9 - 10 classes
hidden_units=[2500, 1000, 1500, 2000, 500],
model_dir="model"
)
classifier.fit(train_data, train_target, steps=1000)
但是,当我运行以下行时,我面临40%的准确率。
accuracy_score = 100*classifier.evaluate(test_data, test_target)['accuracy']
如何调整网络?我做错了什么?类似的研究在学术界取得了99%的准确性。
谢谢。
答案 0 :(得分:1)
我在GitHub上找到了最佳配置。
首先,这不是最好的配置。学术研究have already reached测试集的准确率为99.79%。
classifier = tf.contrib.learn.DNNClassifier(
feature_columns=feature_columns
, n_classes=10
, hidden_units=[128, 32]
, optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=learning_rate)
, activation_fn = tf.nn.relu
)
此外,以下参数将转移到分类器。
epoch = 15000
learning_rate = 0.1
batch_size = 40
通过这种方式,模型在测试集上分类为97.83%,在列车集上分类为99.77%。
答案 1 :(得分:0)
根据经验,对于MNIST数据集,在完全连接的网络中不超过2个隐藏层是个好主意。即hidden_units=[500, 500]
。这应该达到90%以上的准确度。
有什么问题?极端数量的模型参数。例如,只有第二个隐藏层需要(2500 * 1000 + 1000)个参数。经验法则是保持可训练参数的数量与训练样本的数量有些可比,或者在经典机器学习中至少如此。否则,严格规范模型。
这里可以采取哪些步骤?