>100 Views
October 31, 26
スライド概要
本スライドは、学習済みモデルを用いてテスト用画像データ(10,000枚)の分類予測を行う手順と、その結果の確認方法を解説したものです。
予測用モデルの作成:学習済みモデルの後ろに Softmax() レイヤーを接続した probability_model を定義し、生の出力値を0%〜100%の確率表現(合計1.0)へ変換します。
一括予測の実行:probability_model.predict(test_images) により、10,000枚のテスト画像に対する各ラベルの予測確率を一括処理で取得します。
結果の確認と抽出:特定サンプル(例:1枚目の画像)の予測結果から10個の確率配列を確認します。指数表記を f文字列で小数表示に整えて視認性を高める方法や、np.argmax() を用いて最も確率(確信度)が高いクラスのインデックス(例:9=Ankle boot)を直接抽出する手法を提示しています。
すべてのビジネスパーソンが意思決定プロセスにデータを活用する思考を身につけるため、まずは、データサイエンスの分析を体験していきましょう。SECIモデルの最初の段階、共同化(Socialization)からはじめていきます。 下記のブログで、ここにアップしたスライド、動画を随時、公開中です。 【ブログ】https://tutorial4datascience.blogspot.com/ 【Youtubeチャンネル】https://www.youtube.com/@DataScience_for_everyone 【Kindle】そして、このブログをまとめて書籍にしました! https://amzn.to/4ryVppn https://amzn.to/4pGgFb1
5th STEP ディープラーニング Section 7 予 測 データサイエンス チュートリアル 1
予測の流れ トレーニングされたモデルを使用して、テストデータのいくつかの画像に関する予測を行っていきます。 公式チュートリアルでは、下記の流れで予測を行い、確認をしています。 1.出力層にすべてのラベルの確率を出力するレイヤーを追加した予測用のモデルを 新たに作る 2.そのモデルを用いて、テスト画像(10,000枚)に対する予測を一括で行う 3.特定のサンプルの結果を見てみる 4.どのラベルが一番確信度が高いかを出力する このセクションでも、この流れによって解説し、体験していきます。 データサイエンス チュートリアル 2
1.出力層にすべてのラベルの確率を出力するレイヤーを追加した 予測用のモデルを新たに作る (1) 出力層にすべてのラベルの確率を出力するレイヤーを追加した予測用のモデルを『probability_model』と宣言します。 公式チュートリアルでは、①のコードを使っていますが、Keras3で書き換えるために『tf.keras』の部分を『keras』に変更します。 TensorFlow 公式チュートリアル probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()]) Keras3 probability_model = keras.Sequential([model, keras.layers.Softmax()]) データサイエンス チュートリアル 3
1.出力層にすべてのラベルの確率を出力するレイヤーを追加した 予測用のモデルを新たに作る (2) このコードは、元のモデルの出力(ロジット)を、人間にとって直感的に理解しやすい『確率(0%〜100% / 合計が1.0)』 に変換する新しい予測専用モデルを作成するという処理を行っています。 keras.Sequential([model, keras.layers.Softmax()]) 『#78 レイヤーの設定』で行ったように『Sequential Model』を使い、既存のmodelの後ろに Softmax() レイヤーを一直線に繋げて、1つの新し いモデルとして定義しています。下記のa) からd)まで を『model』で代用しています。 a) layers.Input(shape=(28, 28)), b) layers.Flatten(), c) layers.Dense(128, activation='relu’), d) layers.Dense(10) ソフトマックス関数を適用するレイヤーです。 このレイヤーは、 『model』で出力されたロジットをす べての要素の合計が 1.0(100%)になる確率に 変換します。 ソフトマックス関数は、すべての入力値の指数関数 (ネイピア数eの累乗)を計算し、その総和でそれぞ れの値を割るというシンプルな仕組みで成り立ってい ます。 データサイエンス チュートリアル 4
2.そのモデルを用いて、テスト画像に対する予測を一括で行う 次に、下記を用いて、 モデル名.predict(データ名) 実際のコードは、作成した確率変換用モデル『probability_model』を使い、テスト画像(10,000枚)に対する分類予測 を一括で実行し、その結果(確率)を取得する処理を行います。結果は、『predictions』と宣言します。 『predictions』と 宣言しなくてもいいのですが、他のメンバーにもわかるように、 『predictions』に近い表現をすることをお勧めします。 predictions = probability_model.predict(test_images) 結果は下記のようになります。 Kerasの predict() メソッドのデフォルトのバッチサイズ(1回にまとめて処理する画像枚数)は32枚です。10,000枚を32 枚ずつ処理すると、10000/32=312.5となり、端数を切り上げて合計313回のステップ(バッチ処理)で全10,000枚の 予測を完了したことを表しています。 データサイエンス チュートリアル 5
3.特定のサンプルの結果を見てみる (1) 『probability_model』がテスト用データセットの画像のひとつひとつを分類予測した結果を見るためには、下記のコードを用い ます。下記は、最初の画像の予測を見るコードです。 predictions[0] 結果は下記のように10個の数字の配列で表されています。これは、その画像が10個ある衣料品の種類のどれに該当するかの 「確率」を表しています。 データサイエンス チュートリアル 6
3.特定のサンプルの結果を見てみる (2) 指数表記になっていて見にくいので、小数点4位までの小数 で表示してみましょう。 下記のコードで、指数表示を通常の小数に変換することが できます。Python 3.6より新しく『f文字列』という機能が導 入されました。これにより、文字列内に数値や式を埋め込む ことができます。 f”{数値:.有効数字f}” これをforループで繰り返します。 この結果を見ると、10番目(Ankle boot)の確率がダン トツで大きくなっています。 データサイエンス チュートリアル 7
4.どのラベルが一番確率が高いかを出力する どのラベルが一番確率が高いかを直接見ることもできます。 np.argmax(predictions[0]) 結果は、下記のように表示されます。1番目は『0』ですから、10番目のラベル、すなわち『Ankle boot』の確率が一番高い ことがわかります。 これが正しいかどうか、テスト用ラベルを見てみましょう。 test_labels[0] 10番目のラベル、すなわち『Ankle boot』と予測していました。 データサイエンス チュートリアル 8