#77 データの前処理

>100 Views

October 31, 26

スライド概要

このスライドは、ニューラルネットワークの学習前に行う画像データの前処理とMatplotlibを用いた視覚的確認(目視)の手順を解説した教材です。

まず、plt.imshow や plt.colorbar などを使い、単一画像を描画してピクセル値が0〜255の範囲にあることを確認します。

次に、前処理として計算エラー防止や学習最適化のために、画像データを 255.0 で割り、ピクセル値を 0〜1 の範囲に正規化します(訓練・テスト両データに実施)。

最後に、フォーマット確認のため for ループと plt.subplot を用い、最初の25枚の画像を5×5のグリッド状に並べてクラス名付きで一括表示するコードの実装方法と各関数の役割(目盛り非表示・白黒反転など)を解説しています。

profile-image

すべてのビジネスパーソンが意思決定プロセスにデータを活用する思考を身につけるため、まずは、データサイエンスの分析を体験していきましょう。SECIモデルの最初の段階、共同化(Socialization)からはじめていきます。 下記のブログで、ここにアップしたスライド、動画を随時、公開中です。 【ブログ】https://tutorial4datascience.blogspot.com/ 【Youtubeチャンネル】https://www.youtube.com/@DataScience_for_everyone 【Kindle】そして、このブログをまとめて書籍にしました!   https://amzn.to/4ryVppn   https://amzn.to/4pGgFb1

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

5th STEP ディープラーニング Section 4 データの前処理 データサイエンス チュートリアル 1

2.

データの目視(1) トレーニングの前に、データを前処理する必要があります。前処理はピクセルの値がどのようになっているかにより変わってきますの で、画像の目視をしながら確認していきましょう。 Matplotlibを使って、画像を描画していきます。 ① plt.figure() グラフや画像を書き込むための「白いキャンバス(外枠)」を新しく準備する際に使います。今回は引数がありませんが、( )内 に次のような引数を指定することができます。 figsize: (width, height)のタプルを渡す。単位はインチ/dpi: 1インチあたりのドット数 facecolor: 背景色/edgecolor: 枠線の色 ② plt.imshow(train_images[0]) imshow は、数字の羅列である画像データを、私たちが目で見られる画像に変換してキャンバスに貼り付ける処理を行います。 ( )内の『train_images[0] 』は、訓練用データセットの「0番目(最初)の画像データ」を指しています。 2 データサイエンス チュートリアル

3.

データの目視(2) ③ plt.colorbar() 画像の横にカラーバー(色と数値の対応表)を表示します。コンピュータにとって画像は『ピクセルごとの数値の集まり』です。こ のチュートリアルの画像は、各ピクセルが 0(黒・背景)から 255(白・衣類の部分)までの数値で表されているため、どの色 がどの数値に対応しているかを視覚的に分かりやすくしてくれます。 ④ plt.grid(False) 画像の上に重なるグリッド線(網目状の補助線)を「非表示」にします。True にすると写真の上に方眼紙のような線が引か れてしまい、画像が見づらくなることがあるため、ここでは False にしてすっきりさせています。 ⑤ plt.show() ここまで準備したキャンバスを、実際に画面として表示させます。1〜4行目までは「こういう画面を作れ」という命令を裏で組み 立てている段階です。最後のこの一行を実行することで、初めて私たちの目に画像が映し出されます。 データサイエンス チュートリアル 3

4.

データの目視(3) 結果は、右図のように表示されました。 ブーツのように見えますね。 カラーバーを見ると、ピクセルの値は 0 から 255 の 間の数値になっています。 もちろん、『train_images.max()』で確認してもOK です。 データサイエンス チュートリアル 4

5.

データの前処理 ニューラルネットワークモデルにデータを供給する際、ピクセルの値の範囲を0~1にする必要があります。 これを行うには、値を255で割ります。トレーニングセットとテストセットを同じ方法で前処理することが重要です。 これは、「勾配爆発」や「計算エラー」を防ぐため、活性化関数が働きやすくするため、画像内の色の特徴を等しく扱うた め等の理由によります。 データサイエンス チュートリアル 5

6.

最初の25枚の画像をクラス名付きで表示(1) 訓練用データセットの最初の25枚の画像を、クラス名付きで表示してみましょう。 これは、モデルを構築・訓練する前に、データが正しいフォーマットになっていることを確認するためです。 このコードを1行づつ、解説していきます。 データサイエンス チュートリアル 6

7.

最初の25枚の画像をクラス名付きで表示(2) plt.figure(figsize=(10,10)) これは、スライド2にも出てきましたが、画像を書き込むための「白いキャンバス(外枠)」を新しく準備するた めのものです。今回は、引数として『figsize=(width, height)』を使っています。これは、デフォルトのサイ ズだと小さすぎて見にくくなるからです。 for i in range(25): 『#35 データの結合』でも体験しましたが、繰返し処理を行う『forループ』を使います。『i』 は画像のインデッ クス(何枚目の画像か)として使われます。 また、『range(n)』は、『0』から『n - 1』までのn回繰り返すことを指示しています。 plt.subplot(5,5,i+1) 処理のコードを書く際は、半角スペースは4つ空けます。 全体キャンバスを「5行 × 5列(計25マス)」のグリッドに分割し、そのうちの i+1 番目のマス目を作業対 象(これから描画する場所)として選択します。なぜ i+1 にするのかというと、for ループの i は 0 から始ま りますが、subplot のマス目番号は 1 から始まるルール(左上が1、右上が5、右下が25)だからです。 データサイエンス チュートリアル 7

8.

最初の25枚の画像をクラス名付きで表示(3) plt.xticks([]) plt.yticks([]) 現在のマス目のX軸(横軸)の目盛りを非表示にします。括弧の中に空のリスト [] を渡すことで、「目盛り として表示する数字をゼロにする」という意味になります。これがないと、各画像の下にピクセル数(0, 5, 10...)の目盛りが表示されてゴチャゴチャしてしまいます。 Y軸に関しても同様な処理を行います。 plt.grid(False) グリッド線があると服の画像が見づらくなるため、画像の上に重なるマス目状のグリッド線(方眼紙のような 線)をオフ(非表示)にします。 plt.imshow(train_images[i], cmap=plt.cm.binary) 『plt.imshow』は、Matplotlibでデータを画像として表示するツールです。( )内の引数の1番目は、i 番 目の画像データ(train_images[i])を画面に描くことを指示し、2番目は、『cmap=』はカラーマップ名 を指示します。『cmap=“gray”』でもいいのですが、背景が黒、服が白(元の画像データそのまま)に なってしまいますので、『plt.cm.binary』で反転させています。 データサイエンス チュートリアル 8

9.

最初の25枚の画像をクラス名付きで表示(4) plt.xlabel(class_names[train_labels[i]]) このコードによって、マス目の画像の下(X軸のラベル部分)に、その画像に対応する服の名前(文字列) を表示させています。 ①train_labels[i] で、i 番目画像の「正解番号(例:0)」を取得します。 ②それを class_names[0] のように配列のインデックスとして渡すことで、数字を人間の読める文字 (例: ‘T-shirt/top’)に変換します。 『#76 インポートとデータの読み込み』で、 class_namesという 名前でクラス名を保存しておきました。それを使います。 ③plt.xlabel(...) によって、画像の下にテキストとして貼り付けます。 plt.show() ここまで for ループ内で組み立ててきた25枚分の画像とラベル付きキャンバスを、実際に画面上に表示させ ます。この行は for ループの枠外(インデントがない場所)にあるため、25枚分すべての準備が完全に整っ た後に1回だけ呼び出されます。 データサイエンス チュートリアル 9

10.

最初の25枚の画像をクラス名付きで表示(5) 結果は、右図のように表示されました。 このように、1つの描画領域を分割して大量の画像を 一覧表示する手法は、AI開発でデータの全貌をサッと 確認するときに非常によく使われるテンプレートコードで す! データサイエンス チュートリアル 10