
こんにちは、AI研究所のマサミです。
今回は、Azure ML(Azure Machine Learning)を使って、画像認識に特化したディープラーニングのひとつであるCNN(畳み込みネットワーク)の作り方を紹介したいと思います。
Azure MLの使い方は以前の記事「プログラミング不要!? AI(人工知能)の作り方【Azure ML – 機械学習】」をご参照ください。
機械学習に使用するデータはAzure MLのサンプルデータ「MINST Test 10k 28×28 dense」を使用します。
「MINST Test 10k 28×28 dense」の中には28px×28pxの手書きの数字画像(0〜9まで)を数値化したデータが10,000個入っています。
作成するCNNは以下です。
Azure MLの完成キャンバスイメージは以下です。
機械学習のモジュールには「Multiclass Neural Network」を使います。
「Multiclass Neural Network」はプロパティの設定で「Hidden layer specification」を「Custom definition script」に設定することで、Net#言語を追加できるようになりCNNを作成することができます。
Net#は、Microsoft が開発した言語で、ニューラルネットワークアーキテクチャを定義するために使用されます。
今回の設定値ですが、入力層のノード数は、画像が28px × 28pxなので784になります。
畳み込み層のそれぞれの設定値は「フィルタサイズ:5px × 5px」、「スライド量:1」、「フィルタ数:5」、「パディング:有り」で設定しています。
プーリング層の設定値はそれぞれ「フィルタサイズ:2px × 2px」、「スライド量:2」で設定しています。
また、プーリング層は「max pool」または「mean pool」のどちらかを設定することができますが、今回は「max pool」を設定しました。
Net#のプログラムコードは以下のようになります。
const { T = true; F = false; } //入力層 input Picture [28, 28]; //畳み込み層 hidden C1 [5, 28, 28] from Picture convolve { InputShape = [28, 28]; KernelShape = [5, 5]; Stride = [1, 1]; Padding = [T, T]; MapCount = 5; } //プーリング層 hidden P1 [5, 14, 14] from C1 max pool { InputShape = [5, 28, 28]; KernelShape = [1, 2, 2]; Stride = [1, 2, 2]; } //出力層 hidden H [100] from P1 all; //ソフトマックス output Result [10] softmax from H all;
CNNをプログラミングで書くと複雑なコーディングが必要ですが、Azure MLだとこれだけの設定だけで作れてしまいます!
皆さんも一度試してみてください!