はじめに
ディープラーニングという言葉を最近よく聞くようになりました。今回は、Azure Machine Learningを使って、機械学習手法の一つである「データのどの部分が重要か(特徴量)」の判断をディープラーニングの仕組みの中で実行できるので、今回試してみました。(学生のころにAzure Machine Learningがあったら、SVMとか、決定木とかもあって、どんなに楽だったか…)前準備
機械学習を行うためにはデータがないと出来ないです。
今回は cifar-10 のデータを変換して使うことにします。
cifar-10
cifar-10 とは 32×32 ピクセルの画像群で、10 分類されたラベル付けされた画像のデータセットのことです。 主に研究用途で使われます。
テストで使われる画像のラベルは下記の10種類です。
- ✈
- 🚗
- 🐔
- 😺
- Ψ(・ω・ )Ψ
- 🐶
- 🐸
- 🐴
- 🚢
- 🚚
今回は cifar-10 から画像を約1万枚使いまして、学習用・テスト用に分割して利用します。
Azure Machine Learning Studio
GUI で機械学習を構築できる、素敵な Web サービス 出来ることも結構多岐に準備されています。 アルゴリズム チート シート
SVM とかもあって、学生のときにあればどれほどや( ry
フロー
画像の入力
Azure Storage との連携
事前に、 cifar-10のデータを画像に戻して、画像データを Azure Storage の Blob に配置まで終わっているとします。
import images
import images の設定でディレクトリを指定します。
Account name : Storage Account(バケットアカウント) Account key : アクセスキー Path : フォルダまでのパス(hoge/hoge)
メタデータとの結合
import data
import data の設定で読み込みたいファイルを指定します。
Account name : Storage Account(バケットアカウント) Account key : アクセスキー Path : ファイルまでのパス(hoge/hoge)
CSV 形式かつ1行目を項目名として使っています。
join
join するキーを設定で読み込みます。
それぞれの結合する項目名を選択します。
事前処理
select columns
不要なデータを除外する設定をしています。
今回の設定では ImageName を除外するようにしています。
split data
学習用とテスト用にデータを分割しています。
学習用に0.75(7500件)、残りをテストデータして利用します。
学習
今回は ディープラーニング でやりたいので、選ぶのは Multiclass Neural Network にします。
標準( Fully-connected case )のままではニューラルネットワークの学習機ですが、 Custom definition script を選択してカスタマイズ可能です。 公式のサンプルに ディープラーニング で手書き文字の認識を行うサンプルがあります。 Neural Network: Convolution and pooling deep net
今回はこれを参考に cifar-10の学習をしてみました。
Label という項目名に対して、他の要素をパラメータとして学習します。
Custom definition script により、学習方法をカスタマイズしています。
複数クラス分類の畳み込みネットワークの定義: 数字認識の例(公式サンプルより)
input Image [29, 29]; hidden Conv1 [5, 13, 13] from Image convolve { InputShape = [29, 29]; KernelShape = [ 5, 5]; Stride = [ 2, 2]; MapCount = 5; } hidden Conv2 [50, 5, 5] from Conv1 convolve { InputShape = [ 5, 13, 13]; KernelShape = [ 1, 5, 5]; Stride = [ 1, 2, 2]; Sharing = [false, true, true]; MapCount = 10; } hidden Hid3 [100] from Conv2 all; output Digit [10] from Hid3 all;
調整した部分は
- 最終結果(クラス数)
- 入力画像のサイズ
cifar-10での結果
データ読み込みにかかった時間:1:05:33.983
- 0:✈
- 1:🚗
- 2:🐔
- 3:😺
- 4:Ψ(・ω・ )Ψ
- 5:🐶
- 6:🐸
- 7:🐴
- 8:🚢
- 9:🚚
Overall accuracy 0.416465 Average accuracy 0.883293
もちろん、雑に学習しているため 学習層の設計によってはもっといい結果がでるかもしれません。
おまけ・他のデータで試す
アニメの顔について11人が判断できるか
Overall accuracy 0.86 Average accuracy 0.974545
3000枚をテストに使っているんですが、結構精度でますね。
髪の毛の色のウェイトが大きいかったりするんですかね?まぁブラックボックスなんでわからないですが。。