TensorFlowのtutorial「tf.contrib.learn Quickstart」を試す
はじめに
TensorFlowのtutorial tf.contrib.learn Quickstartを試したので共有します。
なお、2016/10/19現在、tutorial内のサンプルコードはエラーが出て動きませんでしたので、そちらについても共有します。
コード全体
コードの全体は下記となります。
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
import numpy as np
# Data sets
# 120sample
IRIS_TRAINING = "iris_training.csv"
# 30 sample
IRIS_TEST = "iris_test.csv"
# Load datasets.
# 下記だと動かない。
# load_csvがdeprecatedとのこと。
# training_set = tf.contrib.learn.datasets.base.load_csv(filename=IRIS_TRAINING,target_dtype=np.int)
# test_set = tf.contrib.learn.datasets.base.load_csv(filename=IRIS_TEST,
# target_dtype=np.int)
# load_csv_with_headerを用いる
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(filename=IRIS_TRAINING,target_dtype=np.int, features_dtype=np.float32, target_column=-1)
test_set = tf.contrib.learn.datasets.base.load_csv_with_header(filename=IRIS_TEST,
target_dtype=np.int, features_dtype=np.float32, target_column=-1)
# DNNの構築
# Specify that all features have real-value data
# four features(sepal w,sepal h,petal w,petal h)
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]
# Build 3 layer DNN with 10, 20, 10 units respectively.
# n_classes は 3つのirisの種類を示す
# checkpoint dataの保存先
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
hidden_units=[10, 20, 10],
n_classes=3,
model_dir="/tmp/iris_model")
# Fit model.
# classifierの中にモデルの状態は保存されているので、
# 下記を2行書けば4000回の試行になる
classifier.fit(x=training_set.data,
y=training_set.target,
steps=2000)
# Evaluate accuracy.
accuracy_score = classifier.evaluate(x=test_set.data,
y=test_set.target)["accuracy"]
print('Accuracy: {0:f}'.format(accuracy_score))
# Classify two new flower samples.
# predictというメソッドを使います。
new_samples = np.array(
[[6.4, 3.2, 4.5, 1.5], [5.8, 3.1, 5.0, 1.7]], dtype=float)
y = classifier.predict(new_samples)
print('Predictions: {}'.format(str(y)))
データセットのダウンロード
本チュートリアルのデータセットはirisデータになります。
featureはsepal length, sepal width, petal length, petal widthの4つで、targetはIris setosa, Iris virginica,Iris versicolorの4つで、irisのどの種類かを判別するモデルを作るチュートリアルになります。
trainデータは120サンプル,testデータは30サンプルになります。
# 120sample
IRIS_TRAINING = "iris_training.csv"
# 30 sample
IRIS_TEST = "iris_test.csv"
データセットの読み込み
ここでつまづきましたが、tutorialのままですと、下記のエラーが出ると思います。
AttributeError: 'module' object has no attribute 'load_csv'
調べてみると、load_csvはdeprecatedとなっており、load_csv_with_headerに変更する必要がありました。
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(filename=IRIS_TRAINING,target_dtype=np.int, features_dtype=np.float32, target_column=-1)
では、target_dtypeでファイル中のtarget(花の種類)の列のフォーマット、features_dtypeでfeatureの各列のフォーマット、target_columnでtargetがどの列に記載されているか(今回は一番後ろなので-1)を指定しています。
# Load datasets.
# 下記だと動かない
# training_set = tf.contrib.learn.datasets.base.load_csv(filename=IRIS_TRAINING,target_dtype=np.int)
# test_set = tf.contrib.learn.datasets.base.load_csv(filename=IRIS_TEST,
# target_dtype=np.int)
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(filename=IRIS_TRAINING,target_dtype=np.int, features_dtype=np.float32, target_column=-1)
test_set = tf.contrib.learn.datasets.base.load_csv_with_header(filename=IRIS_TEST,target_dtype=np.int, features_dtype=np.float32, target_column=-1)
DNNの構築
今回featuresはsepal length, sepal width, petal length, petal widthの4つなので4
と指定しています。
また、hidden layerは3つでそれぞれ10,20,10
。
分類すべき花の種類は3つでn_classes = 3
checkpoint dataの保存先を/tmp/iris_model
と指定します。
# Specify that all features have real-value data
# four features(sepal w,sepal h,petal w,petal h)
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]
# Build 3 layer DNN with 10, 20, 10 units respectively.
# n_classes は 3つのirisの種類を示す
# checkpoint dataの保存先
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
hidden_units=[10, 20, 10],
n_classes=3,
model_dir="/tmp/iris_model")
モデルのフィット
classifierの中にモデルの状態は保存されているので、下記を2行繰り返すと、2000*2=4000回の試行が行われます。
# Fit model.
# classifierの中にモデルの状態は保存されているので、
# 下記を2行書けば4000回の試行になる
classifier.fit(x=training_set.data,
y=training_set.target,
steps=2000)
accuracyの計算
evaluate
というメソッドで、fit
と同様に検証することができます。
# Evaluate accuracy.
accuracy_score = classifier.evaluate(x=test_set.data,
y=test_set.target)["accuracy"]
print('Accuracy: {0:f}'.format(accuracy_score))
おおよそ、0.96程度の数字が帰ってくると思います。
Accuracy: 0.966667
新たなデータの分類
predict
というメソッドを使うことで、新しいデータが来た時に分類することができます。
# Classify two new flower samples.
# predictというメソッドを使います。
new_samples = np.array(
[[6.4, 3.2, 4.5, 1.5], [5.8, 3.1, 5.0, 1.7]], dtype=float)
y = classifier.predict(new_samples)
print('Predictions: {}'.format(str(y)))
それぞれのデータの予測がarrayで帰ってきます。
Predictions: [1 2]
さいごに
簡単にDNNが実装できますね。
ありがとうございました。
Author And Source
この問題について(TensorFlowのtutorial「tf.contrib.learn Quickstart」を試す), 我々は、より多くの情報をここで見つけました https://qiita.com/tackey/items/2886c569433d25619e88著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .