# # 7.5 CNNの実装 # [「ゼロから作るDeep Learning」](https://www.oreilly.co.jp/books/9784873117584/) 7章5節 # のCNNの実装を、Ivoryライブラリで再現します。 # データセットを用意します。これまでと違い、画像を平坦化しません。 from ivory.datasets.mnist import load_dataset # isort:skip data_train, data_test = load_dataset(flatten=False) print(data_train) print(data_train.shape) # 「ゼロから作るDeep Learning」の`SimpleConvNet`を作成します。学習のために、Trainerインス # タンスを用意します。 from ivory.core.trainer import sequential # isort:skip net = [ ("input", 1, 28, 28), ("convolution", 30, 5, 5, "relu"), ("pooling", 2, 2, "flatten"), ("affine", 100, "relu"), ("affine", 10, "softmax_cross_entropy"), ] trainer = sequential(net, optimizer="adam", metrics=["accuracy"]) # 学習を行います。 data_train.epochs = 20 data_train.batch_size = 100 data_train.shuffle() data_test.shuffle()
name = optimizers[k].name plt.title(name) plt.tight_layout() plt.show() # # 6.1.8 MNISTデータセットによる更新手法の比較 # `ch06/optimizer_compare_mnist.py`および`common/multi_layer_net.py`を参考にして、上述の # 更新手法を比較してみます。 # データセットを準備します。 from ivory.datasets.mnist import load_dataset # isort:skip data = load_dataset(train_only=True) # 今回は訓練データのみ使う data.batch_size = 128 data.epochs = -1 data.random = True data # ネットワークを構築します。 from ivory.core.model import sequential # isort:skip net = [ ("input", 784), (4, "affine", 100, "relu"), ("affine", 10, "softmax_cross_entropy"), ] model = sequential(net) model.layers
# ## ハイパーパラメータの検証 # # 6.5.3 ハイパーパラメータ最適化の実装 # `ch06/hyperparameter_optimization.py`を参考にしながら、ハイパーパラメータの最適化を行 # ってみます。 # 課題を定義します。 from ivory.core.trainer import sequential from ivory.datasets.mnist import load_dataset data = load_dataset(train_only=True) data.length = 500 data.shuffle() data.split((8, 2)) data.batch_size = 100 data.epochs = 50 epoch_data = {"train": data[0, :], "val": data[1, :]} net = [ ("input", 784), (6, "affine", 100, "relu"), ("affine", 10, "softmax_cross_entropy"), ] trainer = sequential(net, metrics=["accuracy"]) trainer = trainer.fit(data, epoch_data=epoch_data) trainer # ハイパーパラメータのランダム探索を行うジェネレータを定義します。以下ではハイパーパラメ # ータの探索範囲を「ゼロから作るDeep Learning」から少し変更しています。 import numpy as np # isort:skip
# ## 正則化 # [「ゼロから作るDeep Learning」](https://www.oreilly.co.jp/books/9784873117584/) 6章4節 # の内容を学習しながら、Ivoryライブラリで正則化の評価を行います。 # ### 過学習 # 過学習を起こしてみます。 from ivory.core.trainer import sequential from ivory.datasets.mnist import load_dataset data_train, data_test = load_dataset() data_train.length = 300 # データセットの大きさを制限する。 data_test.length = 300 data_train.batch_size = 100 data_train.epochs = 200 data_train.random = True epoch_data = {"train": data_train[:], "test": data_test[:]} net = [ ("input", 784), (6, "affine", 100, "relu"), # 深いネットワークを作成する。 ("affine", 10, "softmax_cross_entropy"), ] trainer = sequential(net, metrics=["accuracy"]) trainer = trainer.fit(data_train, epoch_data=epoch_data) df = trainer.to_frame() df.tail() # -