class TwoLayerNet(Model): def __init__(self, in_size, hidden_size, out_size, activation=F.sigmoid): super().__init__() self.f = activation self.l1 = L.Linear(in_size, hidden_size) self.l2 = L.Linear(hidden_size, out_size) def __call__(self, x): y = self.f(self.l1(x)) y = self.l2(y) return y model = TwoLayerNet(784, hidden_size, 10) optimizer = optimizers.SGD().setup(model) for epoch in range(max_epoch): sum_loss, sum_acc = 0, 0 for x, t in train_loader: y = model(x) loss = F.softmax_cross_entropy(y, t) acc = F.accuracy(y, t) model.cleargrads() loss.backward() optimizer.update() sum_loss += float(loss.data) * len(t) sum_acc += float(acc.data) * len(t)
import numpy as np import matplotlib.pyplot as plt import dezero from dezero import optimizers import dezero.functions as F from dezero.datasets import get_spiral from dezero.models import TwoLayerNet # ハイパーパラメータの設定 max_epoch = 300 batch_size = 30 hidden_size = 10 lr = 1.0 x, t = get_spiral() model = TwoLayerNet(2, hidden_size, 3) optimizer = optimizers.SGD(lr).setup(model) data_size = len(x) max_iter = math.ceil(data_size / batch_size) # 小数点の切り上げ loss_list = [] for epoch in range(max_epoch): # データのシャッフル idx = np.random.permutation(data_size) x = x[idx] t = t[idx] sum_loss = 0 for i in range(max_iter):
import dezero import dezero.functions as F from dezero import optimizers from dezero.dataset import DatasetLoader from dezero.models import TwoLayerNet max_epoch = 3 batch_size = 100 train_set, test_set = dezero.datasets.get_mnist() train_loader = DatasetLoader(train_set, batch_size) model = TwoLayerNet(784, 1000, 10) optimizer = optimizers.SGD().setup(model) # パラーメタの読み込み model.load_weights('two_layer_net.npz') for epoch in range(max_epoch): sum_loss = 0 for x, t in train_loader: y = model(x) loss = F.softmax_cross_entropy(y, t) model.cleargrads() loss.backward() optimizer.update() sum_loss += float(loss.data) * len(t) print('epoch: {}, loss: {:.4f}'.format(epoch + 1, sum_loss / len(train_set)))
from dezero import optimizers import dezero.functions as F from dezero.models import TwoLayerNet np.random.seed(0) x = np.random.rand(100, 1) y = np.sin(2 * np.pi * x) + np.random.rand(100, 1) x, y = Variable(x), Variable(y) lr = 0.2 max_iter = 10000 hidden_size = 10 N, I = x.shape N, O = y.shape model = TwoLayerNet(I, hidden_size, O) optimizer = optimizers.SGD(lr).setup(model) for i in range(max_iter): y_pred = model(x) loss = F.mean_squared_error(y, y_pred) model.cleargrads() loss.backward() optimizer.update() print(loss) # グラフの描画 import matplotlib.pyplot as plt
from dezero import Variable import dezero.functions as F from dezero.models import TwoLayerNet # データセットの生成 np.random.seed(0) x = np.random.rand(100, 1) y = np.sin(2 * np.pi * x) + np.random.rand(100, 1) x, y = Variable(x), Variable(y) # ハイパーパラメータの設定 lr = 0.2 max_iter = 10000 hidden_size = 10 # モデルの生成 N, I = x.shape N, O = y.shape model = TwoLayerNet(I, hidden_size, O) # 学習の開始 for i in range(max_iter): y_pred = model(x) loss = F.mean_squared_error(y, y_pred) model.cleargrads() loss.backward() for p in model.params(): p.data -= lr * p.grad.data print(loss)
import time import dezero import dezero.functions as F from dezero import optimizers from dezero.dataset import DatasetLoader from dezero.models import TwoLayerNet max_epoch = 3 batch_size = 100 train_set, test_set = dezero.datasets.get_mnist() train_loader = DatasetLoader(train_set, batch_size) model = TwoLayerNet(784, 1000, 10) optimizer = optimizers.SGD().setup(model) # GPU mode train_loader.to_gpu() model.to_gpu() for epoch in range(max_epoch): start = time.time() sum_loss = 0 for x, t in train_loader: y = model(x) loss = F.softmax_cross_entropy(y, t) model.cleargrads() loss.backward() optimizer.update() sum_loss += float(loss.data) * len(t)
import numpy as np np.random.seed(0) # シードを固定 from dezero import Variable, Model import dezero.functions as F from dezero.models import TwoLayerNet def softmax1d(x): y = F.exp(x) sum_y = F.sum(y) return y / sum_y model = TwoLayerNet(in_size=2, hidden_size=10, out_size=3) x = Variable(np.array([0.2, -0.4])) y = model(x) p = softmax1d(y) print(y) # variable([-0.6150578 -0.42790162 0.31733288]) print(p) # variable([0.21068638 0.25404893 0.53526469]) x = np.array([[0.2, -0.4], [0.3, 0.5], [1.3, -3.2], [2.1, 0.3]]) y = model(x) p = F.softmax(y) print(y) # variable([[-0.6150578 -0.42790162 0.31733288] # [-0.76395315 -0.24976449 0.18591381] # [-0.52006394 -0.96254613 0.57818937] # [-0.94252168 -0.50307479 0.17576322]])