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