CNTKはじめにCNTKのチュートリアルの一つ目の題材がロジスティック回帰だったので、チュートリアルに沿ってロジスティック回帰をしてみます。今回は、下記のチュートリアルを追いかけたものを日本語で解説しているような記事になります。GitHubCNTKの環境構築は前回の記事で行っているので、環境が整っていない方はこちらもご参照ください。www.madopro.net(2017/1/30追記)なぜかチュートリアルの日本語版が存在していました。ほかの言語は用意されていないっぽいのに、なぜ。NotebookをGitHubにアップしておきます。記事中では、このノートブックの中のCNTKに関連する箇所を取り出して紹介しています。Notebook自体に馴染みのない方はこの記事もおすすめです。今回はロジスティック回帰を行うので、そのために使用するデータを人為的に用意します。入力データは2次元で、出力は赤と青の2つのクラスであるようなデータを用意しました。Notebookにコードがありますのでそちらを参照してください。下記のような形のモデルを定義します。画像は公式チュートリアルのものです。入力は2次元の変数だったので、それを定義します。入力変数の定義にはcntk.ops.input_variable関数を使用します。np.float32)モデルウェイトwとバイアスbがパラメータになります。パラメータはPythonの辞書で持っておきます。None}では、実際に画像のような形のネットワークを定義します。下記のlinear_layerという関数を使ってネットワークの出力zを定義しています。output_dim)TensorFlowを使用したことがあるかたは、cntk.ops.parameterがtf.Variableに対応していると思うと分かりやすいのではないでしょうか。損失関数は出力にSoftmaxを噛ませたもののクロスエントロピーとします。これもTensorFlowと似たような名前の関数を1行で呼び出すだけでOKです。分類に失敗したサンプルの割合(エラー率)も簡単に求められるようです。label)学習用のオブジェクト学習にははTrainerというオブジェクトを使用します。モデルや損失関数、オプティマイザなどを引数として渡してあげます。今回はオプティマイザはSGDを使用しています。[learner])学習状況可視化用の関数チュートリアルからコピペしただけなのですが、学習の状況を出力する関数を定義しておきます。print_training_progress関数にtrainerオブジェクトとミニバッチを渡してあげると、損失やエラー率などを出力してくれ、学習状況を把握するのに便利です。eval_error学習を走らせるこれで学習をする準備が整いました。コードは次のようになります。trainerにミニバッチを与えていきます。TensorFlowのsess.run()でfeed_dictを使ってデータを与えるのと非常に似ていますね。verbose=1)forループの中でミニバッチのデータを用意し、trainer.train_minibatch()でミニバッチを与えて学習させています。labels})で行っています。TensorFlowでsess.run(feed_dict={...})というように、tf.placeholderの実際の値を渡してあげたりしますが、それと非常によく似た作りになっていますね。上記のコードを実行すると、このように学習が進んでいく様子が確認できます。0.16学習の過程を可視化すると次のようになります。損失も収束してそうなことが確認できます。Notebookを参照してください。自分で損失を保存して、matplotlibでグラフを書いているだけです。)テストデータで精度検証テストデータでのエラー率を知りたい場合には、trainer.test_minibatch()を次のように使用します。labels})実際にモデルが予測したクラスを取得したい場合はこんな感じに書けます。:],axis=1))出力結果はこんな形です。1]ちなみに、今回学習したパラメータを可視化するとこんな形になります。学習が終わり、ある程度正しく分類できそうな直線が引かれていることが確認できるかと思います。アーカイブおすすめの本はてなブログをはじめよう!kanohkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。