入力を平滑化(平坦化:次元削減)。学習の最適化手法の1つ。time#コード解説:timeモジュール。mnist.load_data()#コード解説:0~9の手書き文字MNISTのデータセットを読み込む。訓練用画像データ6万枚・テスト用画像データ1万枚。縦28×横28ピクセル・グレースケール(白黒画像)・各ピクセルは黒から白までの変化を0〜255で表現。y_test)などと学習データを表記する際の「エックス」が大文字のサンプルコードを見かけることもあるのではないかと思います。今回は、学習データ・クラスラベル共に小文字を利用しています。1)#コード解説:「縦28×横28ピクセル」の「グレースケール(白黒)」の「x_train.shape[0]:画像データが6万枚」。1)#コード解説:「縦28×横28ピクセル」の「グレースケール(白黒)」の「x_test.shape[0]:画像データが1万枚」。x_train.astype(‘float32’)/255#コード解説:訓練用の画像データを正規化。黒から白までの変化を0〜255で表現しているので、255で割ることでデータを0〜1の範囲に正規化。float型にすることで実数値で表現。x_test.astype(‘float32’)/255#コード解説:テスト用の画像データを正規化。黒から白までの変化を0〜255で表現しているので、255で割ることでデータを0〜1の範囲に正規化。float型にすることで実数値で表現。1」を「0,1,0,0,0,0,0,0,0,0」と表現。One-hotベクトル(1-of-k表記法))。10):0〜9までのため10クラス。このような形式にすることで、出力結果が「0.1,0,0,0,0,0,0.8,0,0.1,0」(0の確率10%。10の確率10%)を得られる。画像データが機械学習モデルで、どういう判定結果となっているか?という情報を取得できる。1」を「0,1,0,0,0,0,0,0,0,0」と表現。One-hotベクトル(1-of-k表記法))。:0〜9までのため10クラス。このような形式にすることで、出力結果が「0.2,0,0,0,0,0,0.8,0,0,0.1」(0の確率20%。9の確率10%)を得られる。画像データが機械学習モデルで、どういう判定結果となっているか?という情報を取得できる。activation='softmax'))「Conv2D」を使ってディープラーニング技術でおなじみの「畳み込みニューラルネットワーク」(CNN)を実装しています。モデル層を積み重ねる形式の記述方法。.addメソッドで簡単に層を追加できます。3)の解説:「3×3」の大きさのフィルタを16枚使うという意味です。「5×5」「7×7」などと、中心を決められる奇数が使いやすいようです。フィルタ数は、「16・32・64・128・256・512枚」などが使われる傾向にあるようですが、複雑そうな問題ならフィルタ数を多めに、簡単そうな問題ならフィルタ数を少なめで試してみるようです。padding=’same’の解説:今回は出力画像のサイズが変わらないように「padding=’same’」でパディングを実施。フィルタを適用前に0などの要素で周囲を増やすようです。(ゼロパディング)その他にも「stride=(1,1)」(横に1ピクセル・縦に1ピクセルずつフィルタを適用)などとストライドの追加も可能。strideを指定しない場合(デフォルト)は縦・横1ピクセルずつフィルタが適用されるようです。フィルタ後の画像に実施。入力が0以下の時は出力0。入力が0より大きい場合はそのまま出力する。2)))#コード解説:「2×2」の大きさの最大プーリング層。入力画像内の「2×2」の領域で最大の数値を出力する。「3×3」の大きさのフィルタを128枚使う。フィルタ後の画像に実施。入力が0以下の時は出力0。入力が0より大きい場合はそのまま出力する。「3×3」の大きさのフィルタを256枚使う。フィルタ後の画像に実施。入力が0以下の時は出力0。入力が0より大きい場合はそのまま出力する。2)))#コード解説::「2×2」の大きさの最大プーリング層。入力画像内の「2×2」の領域で最大の数値を出力する。今回は、全結合の層とのつながりを「50%」無効化しています。1次元ベクトルに変換する。activation=’relu’))#コード解説:全結合層。