Пример #1
0

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):
Пример #3
0
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]])