#83 トレーニングされたモデルを使用する

>100 Views

October 31, 26

スライド概要

本スライドは、トレーニング済みモデルを使用して単一の画像(テスト用データの2番目の画像)に対する分類予測を行う具体的な手順と注意点を解説した教材です。

主な手順とポイントは以下の通りです。

形状の確認と前処理:画像のサイズ(28×28ピクセル)を確認し、モデルが要求する「3次元テンソル(バッチ次元)」に対応させるため、np.expand_dims を用いて形状を (1, 28, 28) に拡張します。

予測の実行:probability_model.predict を実行して分類確率を得ます。

結果の抽出と図示:結果配列は2次元になっているため、インデックス [0] を指定して1次元の確率配列を取り出します。自作関数 plot_value_array と plt.xticks を使ってX軸にクラス名を45度傾けて指定し、予測確率を棒グラフ化します。

判定:np.argmax で最高確率のラベル(2:Pullover)を特定し、正しく分類できたことを検証します。

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 9 トレーニングされたモデルを使用する データサイエンス チュートリアル 1

2.

予測する画像の選択 最後に、体験したトレーニング済みモデルを使って、ある1個の画像に対する予測を行ってみましょう。 テスト用データセットの2番目の画像を選択します。 念のため、選んだ『test_image[1]』の縦・横のピクセル数を確認してみると、縦28ピクセル × 横28ピクセルで、トレーニン グ済みモデルで予測することが可能であることが確認できました。 この確認作業は、予測をする際に重要です。今回は、同じデータセットをトレーニング用とテスト用に分割したので、縦・横の ピクセル数が揃っていることはわかっていますが、実際の場面では、予測用の新たなデータを使うことが多いので、このような確 認作業をルーティンにしていきましょう。 データサイエンス チュートリアル 2

3.

予測する画像の目視 選んだ画像がどんなものか、Section 4 『データの前処理』のところで書いたコードを活用して、 実物を見てみます。 データサイエンス チュートリアル 3

4.

予測する画像の前処理 今回のKeras のモデルは、『3次元テンソル』 を予測するように作ってきました。そのため、内部では常に『3次元テンソル』の データを待ち受けています。 もし、次元を追加せずに1枚の画像を probability_model.predict(img) に渡してしまうと、モデルは『データの形が違 う!』とエラーを起こしてしまいます。 そのため、1枚だけの画像だけど、形の上では『枚数が1のデータの塊』ですよと見せかけるために、『np.expand_dims』を 使って先頭に次元を追加します。 『np.expand_dims(配列, 軸の番号)』は、指定した位置に、長さ「1」(すなわち枚数が1)の新しい次元(軸)を追 加する NumPy の関数です。 データサイエンス チュートリアル 4

5.

予測結果 (1) さて、予測するデータの次元を『3次元テンソル』 にできたところで、予測をしてみましょう。 データサイエンス チュートリアル 5

6.

予測結果 (2) 『f文字列』を使って、通常の小数に変換してみます。 この際、『for p in predictions_single:』でループを回す と、エラーが出てしまいます。 この原因は、『predictions_single』が、2次元の配列 (形が (1, 10))になっているためです。 先ほどのステップで『np.expand_dims()』を使って画像に バッチの次元を追加したため、予測結果である 『predictions_single』も先頭に次元がついた状態になっ ています。 1枚目の画像に対する10個の確率を取り出すには、 『predictions_single[0]』と指定して、インデックスの次 元を剥がす(1次元の配列にする)必要があります。 どうやら、 『衣類の名前(クラス名)』 は、3番目の 『Pullover(頭からかぶって着用する服)』の確率が最も 高いということがわかりました。 データサイエンス チュートリアル 6

7.

予測結果の図示 結果を、わかりやすいようにグラフにしてみます。 『Section 8 予測結果の図示と検証』で、定義した棒グ ラフの関数を使い、X軸の目盛りを数字から具体的な『衣 類の名前(クラス名)』に変更する処理を行います。 1行目:前セクションで自作した関数『plot_value_array』 を呼び出しています。インデックス1のテスト画像に対す る予測確率の棒グラフを描画する準備をしています。 2行目: range(10): X軸の目盛りの位置(0から9までの10箇 所)を指定します。 class_names: グラフのX軸に表示される数字(0, 1, 2...)を、あらかじめ用意されているクラス名のリスト (T-shirt/top, Trouserなど)に置き換えます。 rotation=45: クラス名同士の文字が重なって見にくくなら ないように、ラベルを45度斜めに回転させて表示します。 3行目:グラフを表示します。 データサイエンス チュートリアル 7

8.

予測結果のラベル表示 予測した結果の中で、最も確率の高いラベルを表示します。 ラベルは、『2』ですから、『Pullover(頭からかぶって着用する服)』と予測されました。 さて、ディープラーニングの体験はいかがでしたか? Keras自体は、そんなに難しくなかったのではないでしょうか?Kerasはすごいですね。 画像の図示が少し難しいので、Google Colaboratoryの付属のGeminiの活用をお勧めします! データサイエンス チュートリアル 8