<< Pythonによるデータ解析4(ニューラルネット応用 2/4)
【Pythonによる機械学習4(ニューラルネット応用 3/4)の目次】
手書き文字画像の分類
画像分類の題材として、手書き文字画像のMNISTを用います。MNISTにおける課題は、以下のような28 x 28ピクセルの手書き数字の画像を、0~9までの10種類のカテゴリに分類することです。また、学習データ数と評価データ数はそれぞれ60000と10000枚あります。
画像特徴量の抽出
文章と同様に画像を、機械学習のアルゴリズムに入力するために、特徴量ベクトルに変換する必要があります。代表的な画像特徴量としてはSIFT、Super vectorおよびFisher vectorなどがあります。
しかしながら、近年は、画像の特徴抽出をニューラルネットワークの一部として実現する畳み込みニューラルネットワーク(CNN: Convolutional Neural Network)を用いるのが主流となっています。CNNでは、以下のように、特徴抽出用と識別用との2つのニューラルネットワークを連結して共通の損失関数を最小化することにより、分類において重要な画像特徴を抽出するモデルパラメータを学習します。
CNNの詳細については、以下を参照してください。
人工知能 第9回 ニューラルネットワークの応用
今回は、画像の解像度が28x28と小さいため、特に特徴抽出は行わずそのまま28x28=784次元の入力ベクトルとして扱うことにします。
学習と評価データの準備
以下から、MNISTの学習データと評価データをダウンロードし、intelligentSystemTraining下のMNISTフォルダに置いてください。
http://yann.lecun.com/exdb/mnist/
> ls MNIST t10k-images-idx3-ubyte.gz train-images-idx3-ubyte.gz t10k-labels-idx1-ubyte.gz train-labels-idx1-ubyte.gz
そして、data.MNISTクラスを用いてデータを読み込み、表示してみます。
>>> import data # MNISTクラスのインスタンス化 >>> myData = data.MNIST() # xTrainとxTestのサイズ >>> myData.xTrain.shape (784, 60000) >>> myData.xTest.shape (784, 10000) # tTrainとtTestのサイズ >>> myData.tTrain.shape (10, 60000) >>> myData.tTest.shape (10, 10000) # 学習データの0から9番目までの画像を表示する(ウィンドウを閉じると次の画像が表示) >>> myData.plotImg(range(0,10),isTrain=True) # 評価データの0から9番目までの画像を表示する(ウィンドウを閉じると次の画像が表示) >>> myData.plotImg(range(0,10),isTrain=False)
以下のような学習と評価用の画像が表示されます。