예제 #1
0
# # 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
예제 #4
0
# ## 正則化

# [「ゼロから作る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()

# -