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

 

 

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