かれ4

かれこれ4個目のブログ

CNTK usage overview

はじめに

このページはこのWikiの内容から何かがわかる気がしたので、翻訳+追記したものになります。 github.com

原文はNikos Karampatziakisによって2016年10月26日・27日に編集されました。


CNTKを使用するには、実行可能なバイナリをダウンロードするか、 ソースコードをダウンロードしてマシン上でコンパイルする必要があります。 (詳細)。

もしくは、Dockerを利用することができます。 blog.tottokug.com

この記事はDockerで動かしている環境で試してました。

CNTKでサポートされている主な3つのタスク

  • Train : トレーニングデータを使用して訓練されたモデルを作成するために、ネットワークを定義してトレーニングする
  • Evaluate : 訓練されたモデルをテストして、テストデータを使用してそのパフォーマンスを評価する
  • Deploy : 訓練されたモデルを使用します(例:独自のソリューションで新しいインスタンスを分類する

これらの各タスクの概要を以下に示し、より詳細な説明へのポインタを提供します。

CNTKは他にも - 既存のモデルの編集 - ノード出力のファイルへの書き込み などのタスクもサポートしています

これらの詳細は、「Advanced Topics」セクションの「Top-level commands」ページにあります。

CNTKを使用したモデルトレーニング

CNTKでニューラルネットワークをトレーニングするには、 3つのコンポーネントで構成する必要があります。

  • ネットワーク : ニューラルネットワークは、その構造/公式、モデルパラメータを含む。 トレーニング基準と評価基準もここに含まれています。
  • リーダー : トレーニングデータの読み方
  • SGD : 確率勾配プロセスのハイパーパラメータ

CNTK実行ファイルを呼び出すときの最初の引数として、 この情報を記述した構成ファイルを使用して指定する必要があります。

構成ファイルは独自の構文を使用します。 構成ファイルの詳細については、Config file overviewを参照してください。

CNTKの構成ファイル例 - MNIST

'01_OneHidden.cntk'

この構成ファイルを使いMNISTの例を示します。

詳細は Image/GettingStarted を参照してください。

この例のCNTKコマンドラインは、

$ cntk configFile=01_OneHidden.cntk

です。

次のスニペットは、トレーニングに関連する設定ファイルの内容の概要を示しています。

modelDir = "$OutputDir$/Models"
deviceId = 0
command = MNISTtrain

modelPath = "$modelDir$/01_OneHidden"

MNISTtrain = {
    action = "train"

    # network definition   
    BrainScriptNetworkBuilder = (new ComputationNetwork
        include "$ConfigDir$/01_OneHidden.bs"
    )

    # learner configuration       
    SGD = [
        ...
    ]

    # reader configuration   
    reader = [
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Train-28x28_cntk_text.txt"
        ...
    ]    
}

command

上記のコードスニペットでは"MNISTtrain"として定義されたタスクを 実行するcommandであると定義されています。

いくつかのタスクを連続して実行することもできます。 例えばtrainとtestを行うには、 commandにコロン区切りで指定することができます。

例)
command = "MNISTtrain:testNetwork"

deviceId

deviceIdパラメータは、CPUまたはGPUのどちらを使用するかを指定します。 "auto"に設定すると、CNTKは利用可能なデバイスを選択します。 CPUを使用する場合は-1に設定し、特定のGPUを使用する場合は0以上の値に設定します。

modelPath

modelPathは、中間および最終訓練モデルを格納する場所を定義します。 この例では、構成ファイルの先頭に定義されたModelDir変数を使用しています。

MNISTtrain

commandで指定した文字列と同じ文字列のパラメータでは、 トレーニングに必要な3つのコンポーネントを定義します。

action = "train" トレーニングするactionであることが定義されています。 サポートされている他のactionには、"test""write"があります。

action = "train" のために最低限必要な3つの構成ブロックは、 ネットワーク(NetworkBuilder)、 トレーニングアルゴリズムのパラメータ(SGD)、 データリーダーのためのパラメータ(reader) になります。

  • NetworkBuilder

    レイヤーのサイズと数、 ノードのタイプなど、ネットワークのトポロジーと詳細を定義します。 標準モデルにはSimple Network Builderを、 カスタムモデルにはBrainScript Network Builderを使用できます。 詳細は対応するWikiページを参照してください。

    (@see Simple Network Builder, BrainScript Network Builder)

  • SGD確率的勾配降下

    このブロックでは、トレーニングアルゴリズムをパラメータ化できます。 設定可能なオプションには、運動量、適応学習率、適応ミニバットサイズ、並列訓練などがあります。 詳細については、SGDブロックを参照してください。

  • reader

    readerブロックは、使用するリーダーと、対応する入力ファイルの場所を定義します。 CNTKはさまざまなフォーマットとタスクのためにいくつかのデータリーダーを提供しています (readerブロックを参照)。

トレーニングされたモデルの評価

'01_OneHidden.cntk' の構成は、次のようになります。

訓練されたモデルの精度を評価するには、evalまたはtestコマンドを使用します(詳細は、Train、Test、Evalも参照してください)。

testNetwork = {
    action = "test"
    minibatchSize = 1024    # reduce this if you run out of memory

    reader = {
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Test-28x28_cntk_text.txt"
        input = {
            features = { dim = 784 ; format = "dense" }
            labels =   { dim = 10  ; format = "dense" }
        }
    }
}

この例では、modelPathtestNetworkブロック内にはありません。 最上位に定義されています(例ではTest-28x28.txtを使用)。

実行するには構成ファイルのcommandを

command = testNetwork

とし実行します。

$ cntk configFile = 01_OneHidden.cntk

テストの結果は以下のように出力されます。

Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!

1つの構成ファイルに複数のタスクも可(原文にはありません)

'01_OneHidden.cntk'

の例を見るとわかりますが、 1. trainNetworkというactionがtrainのタスク 1. testNetworkというactionがtestのタスク の2つが定義されています。

そしてcommandには trainNetwork:testNetworkとして、 trainNetworkとtestNetworkが順番に指定されています。 原文では何度か 下記のような記述が出てきましたが、Exampleとして用意されている01_OneHidden.cntk を使って実行するとトレーニングとテストのタスクが行われるようになっています。

$ cntk configFile = 01_OneHidden.cntk