>100 Views
October 31, 26
スライド概要
本スライドは、Keras 3を用いて画像分類モデルの構造(レイヤー)を設計・構築する手順と各コードの役割を解説したものです。
モデルには層を一直線に繋ぐシンプルなSequential Modelを採用しています。構築は以下の4つの層で構成されます。
Input:入力データの形状(28×28)を宣言します。
Flatten:2次元の画像データを1次元(784要素)へ変換します。
Dense(128, activation='relu'):128個のニューロンとReLU関数を持つ全結合層(中間層)で特徴を分析します。
Dense(10):10個のクラスに対応する生の評価スコア(ロジット)を出力します。
なお、計算誤差を防ぐため出力層でのSoftmax変換を避け、損失計算時に一括処理する手法が採られています。本構成は中間層が1層のため厳密にはディープラーニングではありませんが、基本設計と学習の仕組みを最短で学ぶための最小構成となっています。
すべてのビジネスパーソンが意思決定プロセスにデータを活用する思考を身につけるため、まずは、データサイエンスの分析を体験していきましょう。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 5 レイヤーの設定 データサイエンス チュートリアル 1
レイヤーの設定(1) Section1で解説したように、多数の層からなるニューラルネットワークの学習のことをディープラーニングと呼び、入力層、隠 れ層(中間層)、出力層をレイヤーと呼びます。ディープラーニングのモデルを作るにあたって、まずは、これらのレイヤーを設 計、構築することが必要となります。 入力層 隠れ層(中間層) 出力層 入力 出力 入力 出力 入力 出力 データサイエンス チュートリアル 2
レイヤーの設定(2) 下記が、layersモジュールを取り込み(①)、データを順番に流す処理(②)、様々な種類を使ったレイヤーの構築 (③)を行うコードとなります。順を追って、説明していきます。 ① from keras import layers ② model = keras.Sequential([ layers.Input(shape=(28, 28)), layers.Flatten(), layers.Dense(128, activation='relu'), layers.Dense(10) ]) ③ データサイエンス チュートリアル 3
レイヤーの設定(3) ① from keras import layers 何度も出てきたモジュールのインポート処理です。このTensorFlow公式サイトのチュートリアル『はじめての ニューラルネットワーク:分類問題の初歩』では、layersモジュールの取り込みを行っていないため、コードが、 長くなっています(青字を付け加えなくてはなりません・・・)。 model = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10) ]) データサイエンス チュートリアル 4
レイヤーの設定(4) ② model = keras.Sequential() 今回のチュートリアルでは、 『Sequential Model』を作成します。 ディープラーニングのモデルは、レイヤーで構成されており、各レイヤーは前のレイヤーからの入力を受け取り、出力を生 成します。 Sequential Modelは、レイヤーを一直線に繋げて構成されるもっとも単純なモデルであり、一つの入力か ら一つの出力を生成することができます。 ( )内は、[ ]を付け、選択したレイヤーをカンマで区切って順番に並べていきます。 例えば、今回のチュートリアルのような画像分類の問題では、『Sequential Model』を使って、画像を入力とし、それ がどのクラスに属するかを出力することができます。 Kerasには、『Sequential Model』の他にも、『Functional Model』が用意されており、分岐・並列・スキップなど自 由にモデル構造を構築できます。イメージが湧きにくいのですが、実際のコードの例が下記の参考資料に掲載されてい ますので、興味のある方はGO! 【参考】 【Tensorflow Keras】Sequential APIとFunctional API https://qiita.com/ktdatascience/items/ce18618ed82872ac3d93 データサイエンス チュートリアル 5
レイヤーの設定(5) ③ a) layers.Input(shape=(28, 28)), layers.Flatten(), layers.Dense(128, activation='relu’), layers.Dense(10) b) c) d) ]) a) layers.Input(shape=(28, 28)) a)は、入力層を表現しているコードです。 入力層は、モデルが想定するデータの形状と種類を設定します。入力層自体は処理を行いませんが、画像の サイズやデータセット内の特徴量の数など、モデルが受け取る入力の種類を指示します。これにより、後続のす べてのレイヤーがデータを適切に処理できるようになり、ディープラーニングにおいて重要な役割を担います。 Keras 3では「入力のカタチは最初に Input() で宣言する」というルールに統一されつつあります。こちらの方 が、後からモデルの構造を model.summary() で確認する際にもエラーが起きにくく確実です。 データサイエンス チュートリアル 6
レイヤーの設定(6) b) layers.Flatten() b)によって、多次元配列を1次元の配列に変換する事ができます。 学習するデータは、縦と横の2次元配列(28×28)ですが、多くの機械学習モデルは1次元のデータが必要 となってきます。これを解決するために使用するレイヤーです。これで、入力値として28×28の画像を一次元の 784ピクセルデータで渡す事ができます。 c) layers.Dense(128, activation='relu’) c)Denseは、ニューラルネットワークで前の層のすべてのノードと次の層のすべてのノードを繋ぐ基本の層です。 データを受け取り、重みとバイアスで計算をして次へ送ります。 ( )内の『128』は、128個のニューロンで画像の特徴を分析するように指定しています。この128という数値に は厳密な根拠はなく経験則で決めたものと思われますが。いい感じに画像を分類してくれます。まずは 128 の ような定番の数字でモデルを作り、後から精度を見ながら 64 や 256 に増減させてチューニングする」というの が、AIエンジニアの日常的な開発手順になります。 『activation='relu’』は、活性化関数として、ReLU関数を使用するように指定しています。ReLU関数とは、 入力が0以下の場合に0を出力し、入力が0より大きい場合はそのままの値を出力する関数です。 データサイエンス チュートリアル 7
レイヤーの設定(7) d) layers.Dense(10) d)によって、10個の出力がされていますが、これはロジット(Logits)と呼ばれるもので、各クラスの生の評価 スコアです。 一応、[Tシャツ: -2.1, ズボン: -0.5, ..., スニーカー: 3.2, アンクルブーツ: 8.5]のように、その画像が各クラ スに属する数値を計算したものが算出されているのですが、数値はマイナスから大きなプラスで、確率ではありま せん。 この数値を10個のクラスの合計値が100%になるように確率に変換しているのは Softmax関数です。実際 に『layers.Dense(10, activation=‘softmax’)』とすれば、確率を出力することができます。しかし、コン ピュータで小数点以下の計算をするとき、Softmaxの計算と損失の計算を別々に行うと、数値が小さくなりす ぎて計算エラー(丸め誤差)が起きやすくなります。 次回で体験するモデルの学習時では『from_logits=True』を使っています。これは、「モデルからは生のスコ ア(ロジット)が出てくるから、損失(誤差)を計算するときに、内部で一緒にSoftmax変換もやっておいて ね!」という指示です。丸め誤差を防ぐために、公式チュートリアルでは、このような方法を取っています。 データサイエンス チュートリアル 8
この公式チュートリアルの意味 一般的には『中間層(隠れ層)が2層以上』重なっているネットワークをディープラーニングと呼びます。 この公式チュートリアルでは、中間層(隠れ層)が一つしかありませんので、厳密にはディープラーニングというこ とはできません。 しかし、使われている技術(TensorFlow/Kerasフレームワーク、活性化関数 ReLU、バックプロパゲーション による重み更新、オプティマイザ Adam など)は、ディープラーニングとまったく同じ仕組みで動作しています。 最初から何十層もある本物のディープネットワークを書くと、コードが複雑になり、CPU/GPUでの計算時間もか かってしまいます。初学者が「データの入力 ➔ 隠れ層での処理 ➔ 出力 ➔ 学習(fit)」という一連の流れ を数秒で体験・理解してもらうため、この公式チュートリアルでは最小限のサンプルとして用意されています。 データサイエンス チュートリアル 9