Translate

#77 データの前処理

データがどのようなものかを観察したら、次は、データの前処理を行います。




1.データの目視

トレーニングの前に、データを前処理する必要があります。前処理はピクセルの値がどのようになっているかにより変わってきますので、画像の目視をしながら確認していきましょう。

Matplotlibを使って画像を描画します。コードは下記のようになります。


 plt.figure()
 plt.imshow(train_images[0])
 plt.colorbar()
 plt.grid(False)
 plt.show()


ここからは、コードの解説です。

① plt.figure() 

グラフや画像を書き込むための「白いキャンバス(外枠)」を新しく準備する際に使います。今回は引数がありませんが、( )内に次のような引数を指定することができます。

figsize: (width, height)のタプルを渡す。単位はインチ/dpi: 1インチあたりのドット数
facecolor: 背景色/edgecolor: 枠線の色

② plt.imshow(train_images[0]) 

imshow は、数字の羅列である画像データを、私たちが目で見られる画像に変換してキャンバスに貼り付ける処理を行います。

( )内の『train_images[0] 』は、訓練用データセットの「0番目(最初)の画像データ」を指しています。

③ plt.colorbar() 

画像の横にカラーバー(色と数値の対応表)を表示します。コンピュータにとって画像は『ピクセルごとの数値の集まり』です。このチュートリアルの画像は、各ピクセルが 0(黒・背景)から 255(白・衣類の部分)までの数値で表されているため、どの色がどの数値に対応しているかを視覚的に分かりやすくしてくれます。

④ plt.grid(False) 

画像の上に重なるグリッド線(網目状の補助線)を「非表示」にします。True にすると写真の上に方眼紙のような線が引かれてしまい、画像が見づらくなることがあるため、ここでは False にしてすっきりさせています。

⑤ plt.show() 

ここまで準備したキャンバスを、実際に画面として表示させます。1〜4行目までは「こういう画面を作れ」という命令を裏で組み立てている段階です。最後のこの一行を実行することで、初めて私たちの目に画像が映し出されます。




結果は、上図のように表示されました。

ブーツのように見えますね。

カラーバーを見ると、ピクセルの値は 0 から 255 の間の数値になっています。もちろん、『train_images.max()』で確認してもOKです。


2.データの前処理

ニューラルネットワークモデルにデータを供給する際、ピクセルの値の範囲を0~1にする必要があります。

これを行うために、値を255で割ります。トレーニングセットとテストセットを同じ方法で前処理することが重要です。

これは、「勾配爆発」や「計算エラー」を防ぐため、活性化関数が働きやすくするため、画像内の色の特徴を等しく扱うため等の理由によります。

具体的には、下記のコードになります。


 train_images = train_images / 255.0

 test_images = test_images / 255.0
さて、前処理を行った訓練用のデータセットの最初の25枚の画像を、クラス名付きで表示してみましょう。

これは、モデルを構築・訓練する前に、データが正しいフォーマットになっていることを確認するためです。


 plt.figure(figsize=(10,10))  for i in range(25): plt.subplot(5,5,i+1)  plt.xticks([]) plt.yticks([]) plt.grid(False) plt.imshow(train_images[i], cmap=plt.cm.binary) plt.xlabel(class_names[train_labels[i]])  plt.show()


コードの解説は、下記のスライドを参照してください。









このように、1つの描画領域を分割して大量の画像を一覧表示する手法は、AI開発でデータの全貌をサッと確認するときに非常によく使われるテンプレートコードです!


















コメント