PyTorchはディープラーニング用パッケージです。
PyTorchを使用して手書き数字の画像データ(MNIST)を分類するディープラーニングを実装します。
まずは手書き数字の画像データMNISTをダウンロードします。
変数mnistにデータが格納されます。
1 | # 手書き数字の画像データMNISTをダウンロード |
PyTorchによるディープラーニングは下記の手順で行います。
- データの前処理
- DataLoaderの作成
- ネットワークの構築
- 誤差関数と最適化手法の設定
- 学習と推論の設定
- 学習と推論の実行
データの前処理では、データをニューラルネットワークに投入できるように加工します。
1 | # 1. データの前処理(画像データとラベルに分割し、正規化) |
MNISTのデータの1つ目を可視化してみます。
1 | # MNISTのデータの1つ目を可視化する |
正規化したMNISTデータをPyTorchで扱えるようにDataLoaderという変数に変換します。
1 | # 2. DataLoderの作成 |
ニューラルネットワークを構築します。
‘fc’は全結合(Fully Connecteed)層を意味し、’relu’は活性化関数にReLU関数を使用することを意味します。
1 | # 3. ネットワークの構築 |
ネットワークの誤差関数と最適化手法の設定を行います。
分類問題では誤差関数にクロスエントロピー誤差関数を使用します。
最適化手法にはAdamというアルゴリズムを使います。
1 | # 4. 誤差関数と最適化手法の設定 |
学習と推論での動作を設定します。
学習では訓練データを入力して出力を求め、出力と正解との誤差を計算し、誤差をバックプロパゲーションして結合パラメータを更新・学習させます。
引数のepochとはデータを一通り使用する1試行のことを意味します。
1 | # 5. 学習と推論の設定 |
推論ではテストデータを入力して出力を求め、正解と一致した割合を計算します。
1 | # 5. 学習と推論の設定 |
試しに学習をせずにテストデータで推論してみます。
1 | # 学習なしにテストデータで推論 |
正解率は8%となりました。
次にニューラルネットワークの結合パラメータを学習させてから推論を行います。
6万件の訓練データに対して3epoch学習させます。
1 | # 6. 学習と推論の実行 |
学習後には正解率が95%となり、手書き数字をほぼ正しく認識できるようになりました
試しに2020番目の画像データ推論し、予測結果と画像データ、正解を表示してみます。
1 | # 2020番目の画像データを推論してみる |
なかなか癖のある数字ですが、正しく判定できていることが分かります。
(Google Colaboratoryで動作確認しています。)
参考 > つくりながら学ぶ!深層強化学習 サポートページ