TensorFlow tf.contrib.learn
是用于机器学习过程的高级API。它提供了各种Estimator
代表预定义模型的。一些示例是:
- LinearClassifier--线性分类模型
- KMeansClustering -K-Means聚类的估计量。
- DNNClassifier--用于深度神经网络模型的分类器
- DNNRegressor--深度神经网络模型。
如果可用的估算器列表不足,还可以为您提供编写自己的估算器的技术。
在本教程中,我们将使用DNNClassifier
训练模型并预测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_size
as尺寸。
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