TensorFlow tf.contrib用于MNIST数据集

TensorFlow tf.contrib.learn是用于机器学习过程的高级API。它提供了各种Estimator代表预定义模型的。一些示例是:

如果可用的估算器列表不足,还可以为您提供编写自己的估算器的技术。

在本教程中,我们将使用DNNClassifier训练模型并预测MNIST数据集的标签。我们将解决分类任务,并尝试从其手写表示中识别出实际数字。

MNIST分类

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

tf.logging.set_verbosity(tf.logging.ERROR)

image_size = 28
labels_size = 10
hidden_size = 1024

# Read in the MNIST dataset
mnist = input_data.read_data_sets("MNIST_data/", one_hot=False)

def input_fn(dataset):
    features = dataset.images
    labels = dataset.labels.astype(np.int32)
    return features, labels

# Define the Estimator
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=image_size*image_size)]
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
                                              hidden_units=[hidden_size],
                                              n_classes=labels_size,
                                              optimizer=tf.train.AdamOptimizer())

# Fit the model
features, labels = input_fn(mnist.train)
classifier.fit(x=features, y=labels, batch_size=100, steps=1000)

# Evaluate the model on the test data
features, labels = input_fn(mnist.test)
test_accuracy = classifier.evaluate(x=features, y=labels, steps=1)["accuracy"]

print("\nTest accuracy: %g %%"%(test_accuracy*100))

# Predict the new examples and compare with the onderlying values
features = mnist.validation.images[:10]
labels = mnist.validation.labels[:10].astype(np.int32)
predictions = list(classifier.predict(x=features))

print("\nPredicted labels from validation set: %s"%predictions)
print("Underlying values: %s"%list(labels))

隐藏层

TensorFlow已内置数据集,因此无需手动下载它。

from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=False)

请注意,我们将one_hot参数与值一起使用False。这意味着标签将被读取为整数值,而不是一个热编码向量。

模型

首先,我们需要提供一些值。我们的数据集有10个类,图像大小为28,隐藏层大小设置为1024:

image_size = 28 labels_size = 10 hidden_size = 1024

要创建估算器,我们需要一组特征列。TensorFlow提供了tf.contrib.layers.real_valued_column构建它的方法。当我们的图像变平时,我们将使用image_size*image_sizeas尺寸。

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

下一步是启动模型本身。如前所述,我们DNNClassifier在下面使用深层神经网络。只有一个隐藏层,因此hidden_units参数(是大小列表)仅包含一个数字。作为优化器,将使用AdamOptimizer

classifier = tf.contrib.learn.DNNClassifier( feature_columns=feature_columns, hidden_units=[hidden_size], n_classes=labels_size, optimizer=tf.train.AdamOptimizer())

有了这个模型,我们准备进行培训。

做出预测

训练后的模型还可以用于对新数据进行预测。让我们从验证数据集中获取前10个样本,并在其上使用分类器。

features = mnist.validation.images[:10] labels = mnist.validation.labels[:10].astype(np.int32) predictions = list(classifier.predict(x=features))

现在我们可以根据实际值检查预测

print("\nPredicted labels from validation set: %s"%predictions) print("Underlying values: %s"%list(labels))

您可以使用以下命令运行整个过程:

python estimators.py

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章