はじめに

ディープラーニングという言葉を最近よく聞くようになりました。今回は、Azure Machine Learningを使って、機械学習手法の一つである「データのどの部分が重要か(特徴量)」の判断をディープラーニングの仕組みの中で実行できるので、今回試してみました。(学生のころにAzure Machine Learningがあったら、SVMとか、決定木とかもあって、どんなに楽だったか…)

前準備

機械学習を行うためにはデータがないと出来ないです。
今回は cifar-10 のデータを変換して使うことにします。

cifar-10

cifar-10 とは 32×32 ピクセルの画像群で、10 分類されたラベル付けされた画像のデータセットのことです。 主に研究用途で使われます。

テストで使われる画像のラベルは下記の10種類です。

  • 🚗
  • 🐔
  • 😺
  • Ψ(・ω・ )Ψ
  • 🐶
  • 🐸
  • 🐴
  • 🚢
  • 🚚

今回は cifar-10 から画像を約1万枚使いまして、学習用・テスト用に分割して利用します。

Azure Machine Learning Studio

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枚をテストに使っているんですが、結構精度でますね。

髪の毛の色のウェイトが大きいかったりするんですかね?まぁブラックボックスなんでわからないですが。。

まとめ

といったように、判別機が簡単につくれてしまうわけですね。 もちろん今回はRGBの羅列としてデータを表現しているだけなので他のデータでも学習できます。 ちなみにAzure Machine Learning StudioにはAPI化の仕組みも有るので機械学習のAPIとかもすぐ作成できます。 世の中にはオープンデータで結構データが溢れているので、試してみると人間には気づけなかったなにかに気がつけるかもしれません。 (ちょっと古い記事ですが、オープンデータの記事