機械学習tensorflowフレームワークの初試験

7192 ワード

本文は網易雲コミュニティから来た
作者:汪洋

前言


初心者の学習はGoogleのチュートリアルを参照することができます.始める前に、ローカルにTensorFlowマシン学習フレームワークをインストールします. 
  • まず、ローカルwindowの下でpython環境をインストールし、3.6バージョンのインストールを約束します.
  • Anacondaツールセットをインストールした後、tensorflowというconda環境を作成します:conda create-n tensorflow pip python=3.6;
  • conda切替環境:activate tensorflow;
  • CPU対応TensorFlowバージョン(クイック):pip install--ignore-installed--upgrade tensorflw;
  • 最後にインストールが成功したかどうかを検証し、python dosネーミングに入り、次のコード検証を入力します:
    import tensorflow as tf
    hello = tf.constant('Hello, TensorFlow')
    sess = tf.Session()
    print(sess.run(hello))
    出力Hello、TensorFlow、成功したことを示します.失敗した場合は、pip install--ignore-installed--upgrade tensorflow=1.5.0などの低バージョンの再インストールを選択します.その他のインストール方法は、リファレンスチュートリアルをクリックします.

  • 学習実践を監督する.


    公式では、初心者向けに入門例を示しています.チュートリアルをクリックすると、このチュートリアルをめぐって共有されます.
    1.分類
    公式例では分類アヤメ問題の解決を説明し,機械モデルの訓練を監督学習で行うことを考えた.この学習方式を採用した後、アヤメのどのような特徴で分類するかを決定する必要があります.アヤメの特徴はまだ多く、公式の例では萼と花びらの長さと幅を使用しています.アヤメの種類は非常に多く、公式にも3種類に分類されています.
    expected = ['Setosa', 'Versicolor', 'Virginica']

    次に、大量のデータを取得し、前処理を行い、公式例では他人が整理したデータソースを直接引用し、前期のデータ処理手順を省略し、前の5つのデータ構造は以下の通りである.
    SepalLength
    SepalWidth
    PetalLength
    PetalWidth
    Species
    0
    6.4
    2.8
    5.6
    2.2
    2
    1
    5.0
    2.3
    3.3
    1.0
    1
    2
    4.9
    2.5
    4.5
    1.7
    2
    3
    4.9
    3.1
    1.5
    0.1
    0
    4
    5.7
    3.8
    1.7
    0.1
    0
    説明:
  • の最後の列はアヤメの品種を代表しています.つまり、監督学習中のラベルです.
  • の中間4列は左から右にかけて花萼の長さと幅、花弁の長さと幅を表す.
  • テーブルデータは、120サンプルのデータセットから抽出された5サンプルを表す.機械学習は一般的に数値に依存するため、現在のデータセットのラベル値はすべて数値であり、対応関係:

  • 0
    1
    2
    Setosa
    Versicolor
    Virginica
    次にコードを作成し、まず概念を復習し、モデルは特徴とラベルの関係を指す.訓練は機械学習段階を指し,この段階モデルは絶えず最適化されている.例で選択した監督試験学習方式は,モデルがラベルを含むサンプルで訓練される.
    2.データセットのインポートと解析
    まず、トレーニングセットとテストセットを取得します.トレーニングセットはトレーニングモデルのサンプルであり、テストセットはトレーニング後のモデル効果を評価するサンプルです.まず、選択したデータセットアドレスを設定します.
     """   """TRAN_URL = "http://download.tensorflow.org/data/iris_training.csv""""   """TEST_URL = "http://download.tensorflow.org/data/iris_test.csv"

    tensorflowを使用する.keras.utils.get_file関数はデータセットをダウンロードし、この方法の最初のパラメータはファイル名で、2番目のパラメータはダウンロードアドレスで、クリックして詳細を表示します).
    import tensorflow as tfdef download():
        train_path = tf.keras.utils.get_file('iris_training.csv', TRAN_URL)
        test_path = tf.keras.utils.get_file('iris_test.csv', TEST_URL)    return train_path, test_path

    そしてpandas.read_csv関数はダウンロードしたデータを解析し、解析後に生成されたフォーマットはテーブルであり、フィーチャーリストとラベルリストに分けられ、トレーニングセットとテストセットに戻ります.
    import pandas as pd
    CSV_COLUMN_NAMES = ['SepalLength', 'SepalWidth',                    'PetalLength', 'PetalWidth', 'Species']def load_data(y_species='Species'):
        train_path, test_path = download()
        train = pd.read_csv(train_path, names=CSV_COLUMN_NAMES, header=0)
        train_x, train_y = train, train.pop(y_species)
    
        test = pd.read_csv(test_path, names=CSV_COLUMN_NAMES, header=0)
        test_x, test_y = test, test.pop(y_species)    return (train_x, train_y), (test_x, test_y)

    3.特徴列-数値列
    tensorflowではモデル(Estimator)で使用可能なデータ構造にデータを変換する必要があるデータセットを取得し、tfを呼び出す.feature_columnモジュールの関数を変換します.アヤメの例では、特徴データを浮動小数点数に変換するtfを呼び出す必要がある.feature_column.numeric_columnメソッド.
    import iris_data
    
    (train_x, train_y), (test_x, test_y) = iris_data.load_data()
    my_feature_columns = []for key in train_x.keys():
        my_feature_columns.append(tf.feature_column.numeric_column(key=key))

    ここでkeyは['SepalLength','SepalWidth','PetalLength','PetalWidth']のいずれかである.
    4.モデル選択
    公式例では全接続ニューラルネットワークを選択してアヤメ問題を解決し,ニューラルネットワークを用いて特徴とラベル間の複雑な関係を発見した.tensorflowでは、Estimatorクラスをインスタンス化することでモデルタイプを指定します.ここでは、公式に提供されている事前に作成されたEstimatorクラス、tfを使用します.estimator.DNnClassifier、このEstimatorはサンプルを分類するニューラルネットワークを構築します.
    classifier = tf.estimator.DNNClassifier(
        feature_columns = my_feature_columns,
        hidden_units = [10,10],
        n_classes = 3)

    feature_columnsパラメータは、訓練の特徴列(ここでは数値列)を指す.hidden_unitsパラメータは、ニューラルネットワーク内の各非表示層のニューロン数を定義し、ここでは2つの非表示層が設定され、各非表示層のニューロン数は10個である.n_classesパラメータは予測するラベルの数を表し、ここでは3つの品種を予測する必要があります.その他のパラメータをクリックして表示
    5.トレーニングモデル
    前回は学習モデルを作成し、次にモデルにデータをインポートしてトレーニングしました.tensorflowでは,Estimatorオブジェクトのtrainメソッドトレーニングを呼び出す.
    classifier.train(
        input_fn = lambda:iris_data.train_input_fn(train_x, train_y, 100)
        steps = 1000)

    input_fnパラメータは、トレーニングデータを提供する関数を表す.Stepパラメータは訓練反復回数を表す.train_input_fn関数では,データをtrainメソッドに必要なフォーマットに変換する. 
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))

    訓練効果を保証するために、訓練サンプルはランダムにソートする必要がある.buffer_sizeはサンプル数(120)より大きく設定され、データの十分なランダム化処理を確保することができる. 
    dataset = dataset.shuffle(1000)

    訓練期間中、限られた訓練サンプルの有無を保証するために、tfを呼び出す必要がある.data.Dataset.repeat.
    dataset = dataset.repeat()

    train方法は一度にサンプルを処理し、tf.data.Dataset.batchメソッドは、100個のサンプルを含む複数のロットを組み合わせた複数のサンプルを組み合わせて1つのロットを作成します.
    dataset = dataset.batch(100)

    6.モデル評価
    次に、モデル予測効果を訓練します.tensorflowでは、各Estimatorオブジェクトにevaluateメソッドが提供されます.
    eval_result = classifier.evaluate(
        input_fn = lambda:iris_data.eval_input_fn(test_x, test_y, 100)
    )

    eval_input_fn関数では,evaluateメソッドに必要なフォーマットにデータを変換する.実装は、トレーニングと同様に、ランダム化処理とテストセットの無限の繰り返し使用を必要としないだけです.
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
    dataset.batch(100);return dataset

    7.予測
    次に、このモデルをラベルなしサンプルに対して予測します.公式手動で3つのラベルなしサンプルが提供されています.
    predict_x = {    'SepalLength': [5.1, 5.9, 6.9],    'SepalWidth': [3.3, 3.0, 3.1],    'PetalLength': [1.7, 4.2, 5.4],    'PetalWidth': [0.5, 1.5, 2.1],
    }

    tensorflowでは、各Estimatorオブジェクトにpredictメソッドが提供されます.
    predictions = classifier.predict(
        input_fn = lambda:iris_data.eval_input_fn(predict_x, labels=None, 100)
    )

    evalを改造するinput_fnメソッドはlabels=noneの場合を受け入れることができる
    features=dict(features)if labels is None:
        inputs = featureselse:
        inputs = (features, labels)
    dataset = tf.data.Dataset.from_tensor_slices(inputs)

    次に予測結果を印刷します.predictionsのclass_idsは可能性が最も大きい品種を表し,probabilitiesは各品種の確率を表す
    for pred_dict in predictions:
        class_id = pred_dict['class_ids'][0]
        probability = pred_dict['probabilities'][class_id]
        print(class_id, probability)

    結果は次のとおりです.
    0
    0.99706334
    1
    0.997407
    2
    0.97377485



    の最後の部分


    公式の例を通じて、初心者はその使用を初歩的に理解することができて、もちろんもっと深い使用は理論を勉強してAPIを多く使う必要があります.本文は公式の例に基づいて、初心者として再整理した.
    網易雲無料体験館、0コスト体験20+クラウド製品
    より多くの網易研究開発、製品、運営経験を共有するには、網易クラウドコミュニティにアクセスしてください.
     
    関連記事:【推奨】検証コードについて、これらの【推奨】Androidアプリケーションが二次パッケージされないようにするガイドラインを理解する必要があります.