Tensorflow#3 DNNを用いたIris分類器の構築


1はじめに
この文章は主にTensorflow公式のAPIドキュメントに基づいて整理された.本論文の主な目的はTensorflowが提供する機械学習APIを用いてニューラルネットワークに基づく分類器を構築し,古典的なIris分類データを分類することである.ここでの高級APIは主にtf.contrib.learnに提供されるAPIを指し、
2ステップ
まず、基本的な手順を説明します.
  • 元データセットのCSVからデータを読み出し、Tensorflowの
  • にロードする.
  • ニューラルネットワークに基づく分類器
  • を構築する
  • 訓練データを用いたモデル訓練
  • 試験データを用いたモデル評価
  • 訓練されたモデルを用いて新しいデータを分類する
  • 2.1データロード
    Irisというデータセットは、皆さんも上を見ていることが多いと思いますが、ここでは詳しく紹介せず、基本的な状況だけを説明します.このデータセットには150行のデータが含まれており,3つの異なるIris品種がある.各行のデータには品種の表示情報のほか,萼片の長さ,幅などのパラメータも含まれている.ここで、これらのデータは事前にトレーニングセットとテストセットに分けられ、それぞれ120行と30行A training set of 120 samples(iris_training.csv)である.
    Atest set of 30 samples (iris_test.csv)..
    これらのデータを準備したら、まず最初のコードを完成し、Tensorflowを導入し、データをロードします.
    #coding:utf-8
    
    from __future__ import absolute_import
    
    from __future__ import division
    
    from __future__ import print_function
    
    
    
    import tensorflow as tf
    
    import numpy as np
    
    
    
    #         
    
    IRIS_TRAINING = "iris_training.csv"
    
    IRIS_TEST = "iris_test.csv"
    
    
    
    #   Tensorflow           
    ,target_type    label   ,    012    ,   int
    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_dtyp
    e=np.int)
    
    

    トレーニングデータとテストデータセットでは、.dataでフィーチャーにアクセスしたり、.targetでラベルにアクセスしたりすることができます.この2つの部分は後述します.
    2.2深さニューラルネットワーク分類器の作成
    tf.contrib.learnは多くの実装済みモデルを提供しています.ここではEstimatorsと呼ばれています.これらの定義済みモデルを通じて、これらのモデルとあなたのデータに基づいて迅速に分析することができます.ここではDNNClassifierを使用したDNN分類器を作成します.
    #     4   ,  real-value 
    feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]
    
    #     DNN   ,3 ,               10,20,10,     3 ,         
    classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
                                                hidden_units=[10, 20, 10],
                                                n_classes=3,
                                                model_dir="/tmp/iris_model")

    ここでは生命の各行(すなわち対応する各サンプル)の特徴的な値を取る必要があります.ここではreal-valueを使用してDNnClassifierを構築する際に、hidden_を直接通過することができる3層を構築しました.units特定のレイヤ数とレイヤごとの値を指定n_classnesの場所は私たちが3分類の問題でmodelであることを示しています.dir位置は、ディレクトリで、TensorflowはいくつかのCheckpointを保存することができて、このようにTensorflowはいつでも訓練状況を保存することができます(また一時停止してから訓練を続けることもできます)
    2.3トレーニングモデル
    ここではfit法を用いてモデルにデータを直接埋め込み,訓練を行う.
    #     ,       
    classifier.fit(x=training_set.data,
                   y=training_set.target,
                   steps=2000)

    2.4モデル評価
    ここでは、休暇の精度を測定する方法が必要です.ここでも、テストデータセットを直接提供し、彼の方法を呼び出すと、最終的には約96%の結果が表示されます.
    accuracy_score = classifier.evaluate(x=test_set.data,
                                         y=test_set.target)["accuracy"]
    print('Accuracy: {0:f}'.format(accuracy_score))

    2.5新しいデータセットの予測
    我々はモデルを訓練した後,このモデルを用いて一定のデータ予測を行うことができる.
    #            
    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)))

    3完全なコード
    #coding:utf-8
    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    import tensorflow as tf
    import numpy as np
    
    #         
    IRIS_TRAINING = "iris_training.csv"
    IRIS_TEST = "iris_test.csv"
    
    #   Tensorflow           
    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)
    
    #     4   ,  real-value 
    feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]
    
    #     DNN   ,3 ,               10,20,10,     3 ,         
    classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
                                                hidden_units=[10, 20, 10],
                                                n_classes=3,
                                                model_dir="/tmp/iris_model")
    
    #     ,       
    classifier.fit(x=training_set.data,
                   y=training_set.target,
                   steps=2000)
    
    #     
    accuracy_score = classifier.evaluate(x=test_set.data,
                                         y=test_set.target)["accuracy"]
    print('Accuracy: {0:f}'.format(accuracy_score))
    
    #            
    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)))