2015年7月20日月曜日

Deep Learning のフレームワーク Chainer を使った画像分類 その2

入力データの構造

six パッケージ

前回、Deep Learning のフレームワーク Chainer を使った画像分類その1にてインストールしたパッケージ、sixとは何だったのか。train_mnist.py 内にてファイル mnist.pkl の読み込みに使われていたので調査。結論としては six は Python 2 と Python 3 の違いを吸収するユーティリティ。恐らく 2 と 3 を乗算して six (推測)。

データフォーマット

ファイル mnist.pkl は下記のように読み込まれている(train_mnist.py 30行目)。

mnist = six.moves.cPickle.load(mnist_pickle)

PickleはPythonオブジェクトのシリアライズを行うモジュールで、cPickleはC言語でそれが実装された高速版

なお、MNISTとはアメリカ国立標準技術研究所が提供するデータを元に作られた手書き数字のデータベース。(→配布元)

多層パーセプトロンの作成

(train_mnist.py 43-45行目)

# Prepare multi-layer perceptron model
model = chainer.FunctionSet(l1=F.Linear(784, n_units),
                            l2=F.Linear(n_units, n_units),
                            l3=F.Linear(n_units, 10))

Chainerが提供するLinear関数は数式

(行列Wとベクトルbはパラメータ)を示す。
ニューラルネットワークのうち、「最も基本的かつ最もよく使われている」順伝播型ネットワーク(=多層パーセプトロン)において、ある層のあるユニットの入力をx1〜x4とすると、このユニットが受け取る受け取る総入力uは
u = w1x1+w2x2+w3x3+w4x4+b
と表される1。wは重み(weight)とよばれ、各入力に異なる重みづけがなされる。これにバイアスbを足したものが総入力1。第1層のユニットをi=1,...,I、第2層のユニットをj=1,...,Jで表すと、第1層のユニットの出力xと第2層のユニットの入力uは、ベクトルと行列を用いて表記すると

この時、

2
Liner関数はデフォルトの挙動ではWはランダムに初期化されるが、bはゼロで初期化される。またLiner関数の第一引数は入力ベクトルの次元数、第二引数は出力ベクトルの次元数。

Chainerが提供するFunctionSet関数は、複数のパラメータ化された関数の管理を行う。この関数は単純なオブジェクトの様に振るまい、指定されたキーワード引数は下記のようにそのオブジェクトの属性となる。

model = FunctionSet(
  l1 = F.Linear(4, 3),
  l2 = F.Linear(3, 2))
model.l1
// <chainer.functions.linear.Linear object at..>

以上より、下記の形のネットワークが形成された。


次回、Optimizerとドロップアウト、交差エントロピーをはじめとする伝搬手順の定義。→Deep Learning のフレームワーク Chainer を使った画像分類 その3

1参考: 岡谷2015 p.7-8, 2参考: 岡谷2015 p.9

参考書籍

  • 岡谷貴之(2015)『深層学習 』(機械学習プロフェッショナルシリーズ)講談社

0 件のコメント:

コメントを投稿