Exemple #1
0
import os

import altair as alt
import nnabla as nn
import nnabla.functions as F
import nnabla.monitor as M
import nnabla.solvers as S
import numpy as np
from nnabla.ext_utils import get_extension_context

from ivory.utils.path import cache_dir
from ivory.utils.repository import import_module
from ivory.utils.nnabla.monitor import read_monitor

# `import_module`はGitレポジトリからモジュールをインポートする。
I = import_module("nnabla-examples/mnist-collection/dcgan")
I.__file__

# これで、 mnist-collection/dcgan.pyの内部にアクセスできるようになった。 今回の例ではハイ
# パーパラメータが設定されているのでそれに倣う。

source = inspect.getsource(I)
print(source[source.index("if __name__"):])

max_iter = 20000
learning_rate = 0.0002
batch_size = 64
weight_decay = 0.0001

# コンテキストを設定する。
context = get_extension_context("cudnn", device_id=0, type_config="float")
Exemple #2
0
# # 6.5 RNNLMのさらなる改善

# 高速化のためにGPUを使います。
from ivory.common.context import np
np.context = 'gpu'

# PTBデータセットを読み出します。
from ivory.common.dataset import TimeDataset  # isort:skip
from ivory.utils.repository import import_module  # isort:skip

ptb = import_module("scratch2/dataset/ptb")
corpus, _, _ = ptb.load_data("train")
corpus_val, _, _ = ptb.load_data("val")
corpus_test, _, _ = ptb.load_data("test")
vocab_size = int(max(corpus) + 1)
x, t = corpus[:-1], corpus[1:]
data = TimeDataset((x, t), time_size=35, batch_size=20)
data.epochs = 1
data

# ハイパーパラメータの設定を行います。
wordvec_size = 650
hidden_size = 650
lr = 20.0
max_epoch = 40
max_grad = 0.25
dropout = 0.5

# モデルを作成します。
from ivory.core.trainer import sequential  # isort:skip
t
# 例えば、上の例は、バッチデータ0の正解ラベルが{{t[0]}}で、バッチデータ1の正解ラベル
# が{{t[1]}}であることを示します。

# 交差エントロピー誤差はターゲットの位置にあるデータを取り出すことに相当するので、以下の
# ように実装できます。
y_ = y[np.arange(N), t]
y_
# あとは対数の和を取りますが、無限小に発散することを防ぐために微小な値を付加します。また
# 、バッチ数によらない結果を得るために、バッチ数で除算します。
-np.sum(np.log(y_ + 1e-7)) / N

# 「ゼロから作るDeep Learning」の実装と比較します。
from ivory.utils.repository import import_module  # isort:skip

layers = import_module("scratch2/common.layers")
s = layers.SoftmaxWithLoss()
s.forward(x, t)


# 以上が、順伝搬になり、上のスカラー値が損失関数の値になります。

# 逆伝搬は、ソフトマックス関数と交差エントロピー誤差を合わせたレイヤの勾配が次式で与えら
# れることを天下り的に認めたうえで、数値微分によって正しいことを確認します。

# $$ \partial L/x_k = y_k - \delta_{tk} $$
dx = y.copy()
dx[np.arange(N), t] -= 1
dx / N

# 「ゼロから作るDeep Learning」の実装と比較します。
Exemple #4
0
# # NNabla by Examples
# # (https://nnabla.readthedocs.io/en/latest/python/tutorial/by_examples.html)

import matplotlib.pyplot as plt
import nnabla as nn
import nnabla.functions as F
import nnabla.parametric_functions as PF
import nnabla.solvers as S
import numpy as np
from nnabla.ext_utils import get_extension_context
from nnabla.monitor import tile_images

from ivory.utils.path import cache_file
from ivory.utils.repository import import_module

tiny_digits = import_module("nnabla/tutorial/tiny_digits")
np.random.seed(0)
imshow_opt = dict(cmap="gray", interpolation="nearest")

# ## Logistic Regression
# ### Preparing a Toy Dataset
digits = tiny_digits.load_digits(n_class=10)
tiny_digits.plot_stats(digits)

# -
data = tiny_digits.data_iterator_tiny_digits(digits,
                                             batch_size=64,
                                             shuffle=True)
# -
img, label = data.next()
plt.imshow(tile_images(img), **imshow_opt)
Exemple #5
0
# # 7.3 seq2seqの実装

# 足し算データセットを読み出します。
from ivory.utils.repository import import_module  # isort:skip

sequence = import_module("scratch2/dataset/sequence")
x_train, t_train = sequence.load_data("addition.txt")[0]
char_to_id, id_to_char = sequence.get_vocab()

# モデルの形状を設定します。
vocab_size = len(char_to_id)
wordvec_size = 16
hideen_size = 128

# 「ゼロから作るDeep Learning ❷」のモデルを読み込みます。
sequence = import_module("scratch2/ch07/seq2seq")
seq2seq = sequence.Seq2seq(vocab_size, wordvec_size, hideen_size)
for p in seq2seq.params:
    print(p.shape)

# モデルを作成します。
from ivory.core.model import branch, Model  # isort:skip

net_encoder = [
    ("input", vocab_size),
    ("embedding", wordvec_size),
    ("lstm", hideen_size, "select"),
]

net_decoder = [
    ("input", vocab_size),
Exemple #6
0
import nnabla.functions as F
import nnabla.solvers as S
import numpy as np
import pandas as pd
from nnabla.ext_utils import get_extension_context
from nnabla.monitor import Monitor, MonitorSeries, MonitorTimeElapsed
from numpy.random import RandomState

# Ivoryパッケージから便利な関数をインポート。
from ivory.utils.path import cache_dir, cache_file
from ivory.utils.repository import import_module
from ivory.utils.utils import set_args
from ivory.utils.nnabla.monitor import read_monitor

# `import_module`はGitレポジトリからモジュールをインポートする。
cl = import_module("nnabla-examples/mnist-collection/classification")
cl_bnn = import_module("nnabla-examples/mnist-collection/classification_bnn")

print(cl.__file__)
print(cl_bnn.__file__)

# これで、 mnist-collection/classification[_bnn].pyの内部にアクセスできるようになった。
# `set_args`関数は、`sys.argv`を書き換えて、あたかもコンソールから実行しているかのように
# 装うためにある。コンテキストをcudnnに設定し、保存ディレクトリを指定する。

save_path = cache_file(cl.name, "tmp.monitor")
set_args(f"--context cudnn -m {save_path} -o {save_path}")
args = cl.get_args()

# 変数`args`を見てみる。
print("Type:", type(args))
Exemple #7
0
from collections import namedtuple

import altair as alt
import nnabla as nn
import nnabla.functions as F
import nnabla.monitor as M
import nnabla.solvers as S
import numpy as np
import pandas as pd
from nnabla.ext_utils import get_extension_context

from ivory.utils.path import cache_dir
from ivory.utils.repository import import_module

# モジュールのインポートとコンテキストの設定。
I = import_module("nnabla-examples/mnist-collection/siamese")
context = get_extension_context("cudnn", device_id=0, type_config="float")
nn.set_default_context(context)
nn.context.get_current_context()

# 訓練用とテスト用にCNNを作成する。
net = namedtuple("net", ("image0", "image1", "label", "pred", "loss", "data"))


def create_net(test, batch_size=128, margin=1.0):  # Margin for contrastive loss.
    image0 = nn.Variable([batch_size, 1, 28, 28])
    image1 = nn.Variable([batch_size, 1, 28, 28])
    label = nn.Variable([batch_size])
    pred = I.mnist_lenet_siamese(image0, image1, test=test)
    loss = F.mean(I.contrastive_loss(pred, label, margin))
    data = I.siamese_data_iterator(batch_size, test, rng=np.random.RandomState(313))
Exemple #8
0
# # 1.4 ニューラルネットワークで問題を解く

# [「ゼロから作るDeep Learning ❷」](https://www.oreilly.co.jp/books/9784873118369/)
# 1章4節のスパイラルデータの学習を再現します。

from ivory.utils.repository import import_module

spiral = import_module("scratch2/dataset/spiral")
x, t = spiral.load_data()
t = t.argmax(axis=1)
print(x.shape)
print(t.shape)

# カスタムのデータセットを作成します。
from ivory.common.dataset import Dataset  # isort:skip

data = Dataset((x, t), name="spiral")
data.shuffle()
data.epochs = 300
data.batch_size = 30
data

# Trainerインスタンスを作成します。
from ivory.core.trainer import sequential  # isort:skip

net = [("input", 2), ("affine", 10, "sigmoid"),
       ("affine", 3, "softmax_cross_entropy")]

trainer = sequential(net, metrics=["loss"])
trainer.optimizer.learning_rate = 1
trainer = trainer.fit(data, epoch_data=data[:])