def main():
    # 获取MNIST数据
    (train_x, train_label), (test_x, test_label) = load_mnist(flatten=False)

    # 构造深层CNN
    network = DeepConvNet()

    # 生成一个训练器
    trainer = Trainer(network,
                      train_x,
                      train_label,
                      test_x,
                      test_label,
                      epochs=20,
                      mini_batch_size=100,
                      optimizer='Adam',
                      optimizer_param={'lr': 0.001},
                      evaluate_sample_num_per_epoch=1000,
                      verbose=True)

    trainer.train()  # 训练上面构造好的神经网络

    network.save_params()  # 训练完成后持久化参数
    print("Saved Network Parameters!")

    # 获取训练过程中训练集和测试集的准确率
    train_acc_list = trainer.train_acc_list
    test_acc_list = trainer.test_acc_list

    draw(train_acc_list, test_acc_list)  # 绘制准确率变化图
Exemplo n.º 2
0
def __train(lr, weight_decay, epocs = 50):
    network = MultiLayerNet(input_size = 784, hidden_size_list = [100, 100, 100, 100, 100, 100], output_size = 10, weight_decay_lambda= weight_decay)
    trainer = Trainer(network, x_train, t_train, x_val, t_val, epochs = epocs, mini_batch_size=100, optimizer="sgd", optimizer_param={"lr":lr}, verbose=False)

    trainer.train()

    return trainer.test_acc_list, trainer.train_acc_list
Exemplo n.º 3
0
def main():
    (train_x, train_label), (test_x, test_label) = load_mnist()
    # 为了再现过拟合,减少学习数据
    train_x = train_x[: 300]
    train_label = train_label[: 300]

    # 设定是否使用Dropuout,以及比例 ========================
    use_dropout = False
    # use_dropout = True
    dropout_ratio = 0.2

    network = MultiLayerNetExtend(
        input_size=784, hidden_size_list=[100, 100, 100, 100, 100, 100],
        output_size=10, use_dropout=use_dropout, dropout_ratio=dropout_ratio)

    trainer = Trainer(network, train_x, train_label, test_x, test_label,
                      epochs=301, mini_batch_size=100, optimizer='sgd',
                      optimizer_param={'lr': 0.01}, verbose=True)

    trainer.train()

    train_acc_list = trainer.train_acc_list
    test_acc_list = trainer.test_acc_list

    draw(train_acc_list, test_acc_list)
def __train(lr, weight_decay, epocs=50):
    network = MultiLayerNet(input_size=784, hidden_size_list=[100, 100, 100, 100, 100, 100],
                            output_size=10, weight_decay_lambda=weight_decay)
    trainer = Trainer(network, x_train, t_train, x_val, t_val,
                      epochs=epocs, mini_batch_size=100,
                      optimizer='sgd', optimizer_param={'lr': lr}, verbose=False)
    trainer.train()

    return trainer.test_acc_list, trainer.train_acc_list
def train(train_x, train_label, val_x, val_label, lr, weight_decay, epochs=50):
    # 按照给定的超参数进行训练一个神经网络,并返回在验证集和训练集上的准确率
    network = MultiLayerNet(input_size=784,
                            hidden_size_list=[100, 100, 100, 100, 100, 100],
                            output_size=10, weight_decay_lambda=weight_decay)
    trainer = Trainer(network, train_x, train_label, val_x, val_label,
                      epochs=epochs, mini_batch_size=100, optimizer='SGD',
                      optimizer_param={'lr': lr}, verbose=True)
    trainer.train()

    return trainer.test_acc_list, trainer.train_acc_list
Exemplo n.º 6
0
def main():
    (x_train, t_train), (x_test, t_test) = load_mnist(flatten=False, one_hot_label=True)
    network = DeepConvNet()
    trainer = Trainer(network, x_train, t_train, x_test, t_test,
                  epochs=20, mini_batch_size=100,
                  optimizer='Adam', optimizer_param={'lr':0.001},
                  evaluate_sample_num_per_epoch=1000)
    trainer.train()

    network.save_params('deep_convnet_params.pkl')
    print("Saved Network Parameters!")
Exemplo n.º 7
0
def __train(lr, weight_decay, epocs = 50):
    #네트워크 생성
    network = MultiLayerNet(input_size=784, hidden_size_list=[100, 100, 100, 100, 100, 100],
                            output_size= 10, weight_decay_lambda=weight_decay)

    #훈련 초기화
    trainer = Trainer(network,x_train,t_train,x_test,t_test,epocs,mini_batch_size=100,
                      optimizer='adam', optimizer_param={'lr':lr},verbose=False)

    #훈련 시작
    trainer.train()

    return trainer.test_acc_list, trainer.train_acc_list
Exemplo n.º 8
0
def __train(epocs=50):
    network = MultiLayerNet(input_size=784,
                            hidden_size_list=[100, 100, 100, 100, 100, 100],
                            output_size=10,
                            weight_decay_lambda=1.865405500969014e-05)
    trainer = Trainer(network,
                      x_train,
                      t_train,
                      x_test,
                      t_test,
                      epochs=epocs,
                      mini_batch_size=100,
                      optimizer='AdaGrad',
                      optimizer_param={'lr': 0.002737364082615975})
    trainer.train()

    return trainer.test_acc_list, trainer.train_acc_list
Exemplo n.º 9
0
def main():
    (x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)

    # 処理に時間のかかる場合はデータを削除
    #x_train, t_train = x_train[:5000], t_train[:5000]
    #x_test, t_test = x_test[:1000], t_test[:1000]

    max_epochs = 20

    network = SimpleConvNet(input_dim=(1, 28, 28),
                            conv_param={
                                'filter_num': 30,
                                'filter_size': 5,
                                'pad': 0,
                                'stride': 1
                            },
                            hidden_size=100,
                            output_size=10,
                            weight_init_std=0.01)

    trainer = Trainer(network,
                      x_train,
                      t_train,
                      x_test,
                      t_test,
                      epochs=max_epochs,
                      mini_batch_size=100,
                      optimizer='Adam',
                      optimizer_param={'lr': 0.001},
                      evaluate_sample_num_per_epoch=1000)
    trainer.train()

    # パラメータの保存
    network.save_params("params.pkl")
    print("Saved Network Parameters!")

    # グラフの描画
    markers = {'train': 'o', 'test': 's'}
    x = np.arange(max_epochs)
    plt.plot(x, trainer.train_acc_list, marker='o', label='train', markevery=2)
    plt.plot(x, trainer.train_acc_list, marker='s', label='test', markevery=2)
    plt.xlabel = ("epochs")
    plt.ylabel = ("accuracy")
    plt.ylim(0, 1.0)
    plt.legend(loc='lower right')
    plt.show()
def __train(lr, weight_decay, epoches=50):

    net = MultiLayerNet(input_size=784,
                        hidden_size_list=[100, 100, 100, 100, 100, 100],
                        output_size=10,
                        weight_decay_lambda=weight_decay)
    trainer = Trainer(net,
                      x_train,
                      t_train,
                      x_valuation,
                      t_valuation,
                      epoches=epoches,
                      mini_batch_size=100,
                      optimizer='SGD',
                      optimizer_param={'lr': lr},
                      verbose=False)
    trainer.train()
    return trainer.train_acc_list, trainer.test_acc_list
Exemplo n.º 11
0
def __train(lr, weight_decay_lambda, epoch_num=120):
    network = MultiLayerNetExtend(input_size=784,
                                  hidden_size_list=[100] * 5,
                                  output_size=10,
                                  activation='ReLu',
                                  weight_init_std='ReLu',
                                  weight_decay_lambda=weight_decay_lambda,
                                  use_BatchNormalization=False,
                                  use_weight_decay=True)
    # 注意下面传入的不是测试集而是验证集
    trainer = Trainer(network=network,
                      x_train=x_train,
                      t_train=t_train,
                      x_test=x_val,
                      t_test=t_val,
                      epochs=epoch_num,
                      mini_batch_num=100,
                      optimizer='SGD',
                      optimizer_params={'lr': lr})
    trainer.train()
    return trainer.train_acc_list, trainer.test_acc_list  # 返回一次实验测试集和验证集的精度
Exemplo n.º 12
0
def main():
    # 获取MNIST数据
    (train_x, train_label), (test_x, test_label) = load_mnist(flatten=False)

    # 构造CNN
    network = SimpleConvNet(input_dim=(1, 28, 28),
                            conv_param={
                                'filter_num': 30,
                                'filter_size': 5,
                                'pad': 0,
                                'stride': 1
                            },
                            hidden_size=100,
                            output_size=10,
                            weight_init_std=0.01)

    # 生成一个训练器
    trainer = Trainer(network,
                      train_x,
                      train_label,
                      test_x,
                      test_label,
                      epochs=20,
                      mini_batch_size=100,
                      optimizer='Adam',
                      optimizer_param={'lr': 0.001},
                      evaluate_sample_num_per_epoch=1000,
                      verbose=True)

    trainer.train()  # 训练上面构造好的神经网络

    network.save_params()  # 训练完成后持久化参数
    print("Saved Network Parameters!")

    # 获取训练过程中训练集和测试集的准确率
    train_acc_list = trainer.train_acc_list
    test_acc_list = trainer.test_acc_list

    draw(train_acc_list, test_acc_list)  # 绘制准确率变化图
Exemplo n.º 13
0
def train():
    start = time.time()
    (x_train, t_train), (x_test, t_test) = load_katakana_arg(flatten=False)
    print('x_train', x_train.shape, 't_train', t_train.shape)
    print('x_test', x_test.shape, 't_test', t_test.shape)

    network = CNNNet()
    trainer = Trainer(network, x_train, t_train, x_test, t_test,
                      epochs=50, mini_batch_size=256,
                      optimizer='Adam', optimizer_param={'lr': 0.001})

    train_acc_list, train_loss_list, test_acc_list, test_loss_list = trainer.train()
    elapsed_time = time.time() - start

    print("=============== Elapse Time ===============")
    print("elapsed_time:{0}".format(elapsed_time) + "[sec]")
network = MultiLayerNetExtend(input_size=784,
                              hidden_size_list=[100, 100, 100, 100, 100, 100],
                              output_size=10,
                              use_dropout=use_dropout,
                              dropout_ration=dropout_ration)
trainer = Trainer(network,
                  x_train,
                  t_train,
                  x_test,
                  t_test,
                  epochs=301,
                  mini_batch_size=100,
                  optimizer='sgd',
                  optimizer_param={'lr': 0.01},
                  verbose=True)
trainer.train()  # 开始训练

# 获取精度结果
train_acc_list = trainer.train_acc_list
test_acc_list = trainer.test_acc_list

# 绘制图表
x = np.arange(len(train_acc_list))
plt.plot(x, train_acc_list, marker='o', label='train', markevery=10)
plt.plot(x, test_acc_list, marker='s', label='test', markevery=10)
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.ylim(0, 1.0)
plt.legend(loc='lower right')
plt.show()
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)

# 오버피팅을 재현하기 위해 학습 데이터 수를 줄임
x_train = x_train[:300]
t_train = t_train[:300]

# 드롭아웃 사용 유무와 비울 설정 ========================
use_dropout = True  # 드롭아웃을 쓰지 않을 때는 False
dropout_ratio = 0.2
# ====================================================

network = MultiLayerNetExtend(input_size=784, hidden_size_list=[100, 100, 100, 100, 100, 100],
                              output_size=10, use_dropout=use_dropout, dropout_ration=dropout_ratio)
trainer = Trainer(network, x_train, t_train, x_test, t_test,
                  epochs=301, mini_batch_size=100,
                  optimizer='sgd', optimizer_param={'lr': 0.01}, verbose=True)
trainer.train()

train_acc_list, test_acc_list = trainer.train_acc_list, trainer.test_acc_list

# 그래프 그리기==========
markers = {'train': 'o', 'test': 's'}
x = np.arange(len(train_acc_list))
plt.plot(x, train_acc_list, marker='o', label='train', markevery=10)
plt.plot(x, test_acc_list, marker='s', label='test', markevery=10)
plt.xlabel("epochs")
plt.ylabel("accuracy")
plt.ylim(0, 1.0)
plt.legend(loc='lower right')
plt.show()
Exemplo n.º 16
0
                                'qat_scheme': KMQATScheme.LossAwareCompensation},
                  conv_param_5={'filter_num': 256, 'filter_size': 3, 'pad': 1, 'stride': 1,
                                'enable_fp_qat': True, 'enable_bp_gradient_quantization': True,
                                'qat_scheme': KMQATScheme.LossAwareCompensation},
                  affine1_param={'enable_fp_qat': False, 'enable_bp_gradient_quantization': False},
                  affine2_param={'enable_fp_qat': False, 'enable_bp_gradient_quantization': False},
                  affine3_param={'enable_fp_qat': False, 'enable_bp_gradient_quantization': False},
                  hidden_size_1=4096, hidden_size_2=4096, output_size=10,
                  enable_compensation_L2_regularization=True, compensation_L2_regularization_lambda=0.1,
                  mini_batch_size=batch_size)
# ======================================= Network Configuration =======================================


trainer = Trainer(network, x_train, t_train, x_test, t_test,
                  epochs=max_epochs, mini_batch_size=batch_size,
                  optimizer=optimizer, optimizer_param={'lr': learning_rate},
                  evaluate_sample_num_per_epoch=evaluate_sample_num, log_per_epoch=log_per_epoch, verbose=True)
trainer.train(log_time=method_time_inspection)

# Draw figure
markers = {'train loss': '^', 'train acc': 'o', 'test acc': 's'}
x = np.arange(len(trainer.train_loss_list))
plt.plot(x, trainer.train_loss_list, marker='^', label='train loss', markevery=2)
plt.plot(x, trainer.train_acc_list, marker='o', label='train acc', markevery=2)
plt.plot(x, trainer.test_acc_list, marker='s', label='test acc', markevery=2)
plt.xlabel("Training Progress")
plt.ylabel("Accuracy & Loss")
plt.ylim(0, 2.5)
plt.legend(loc='best')
plt.show()
                              hidden_size_list=[100, 100, 100, 100, 100, 100],
                              output_size=10,
                              use_dropout=use_dropout,
                              dropout_ration=dropout_ratio)
trainer = Trainer(network,
                  x_train,
                  t_train,
                  x_test,
                  t_test,
                  epochs=301,
                  mini_batch_size=100,
                  optimizer='sgd',
                  optimizer_param={'lr': 0.01},
                  verbose=True)  #verbose는 중간중간 출력값을 나타내고 싶을 때

trainer.train()  #훈련 시작!

train_acc_list, test_acc_list = trainer.train_acc_list, trainer.test_acc_list

#그래프 그리기=======================
markers = {'trainer': 'o', 'test': 's'}
x = np.arange(len(train_acc_list))

plt.plot(x, train_acc_list, marker='o', label='train', markevery=10)
plt.plot(x, test_acc_list, marker='s', label='test', markevery=10)

plt.xlabel("epochs")
plt.ylabel("accuracy")
plt.ylim(0, 1.0)
plt.legend(loc="lower left")
plt.show()
Exemplo n.º 18
0
            print("-" * 80 + "\n")

        trainer1 = Trainer(device,
                           model,
                           dataset,
                           optimizer,
                           [CrossEntropy(), AlphaLoss()],
                           name=args.name,
                           topk=topk,
                           checkpointFreq=args.checkpoint_freq)
        trainer1.temperature = args.starting_temp
        trainer1.callbacks.append(AlphaCallback(args.alpha))
        if scheduler is not None:
            trainer1.callbacks.append(SchedulerCB(scheduler))

        trainer1.train(args.epochs)

        torch.save(model.state_dict(), args.name + ".model")

    else:  # arg.resume is not None
        model.load_state_dict(torch.load(args.resume))

    print("-" * 80)
    print("Binarize and fine tune\n")
    print("")
    FROZEN_ALPHA = (model.Lblock.alpha.data > 0.2).float().to(device)

    with open("logs/{}.log".format(args.name), "a") as f:
        f.write("*******\nFine tuning after binarization\n*******\n")
    model.Lblock.alpha.data = FROZEN_ALPHA
    model.Lblock.alpha.requires_grad = False
Exemplo n.º 19
0
# coding: utf-8
import os
import sys

sys.path.append(os.pardir)  # 부모 디렉터리의 파일을 가져올 수 있도록 설정
from dataset.mnist import load_mnist
from deep_convnet import DeepConvNet
from common.trainer import Trainer

(x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)

network = DeepConvNet()
trainer = Trainer(network,
                  x_train,
                  t_train,
                  x_test,
                  t_test,
                  epochs=20,
                  mini_batch_size=100,
                  optimizer='Adam',
                  optimizer_param={'lr': 0.001},
                  evaluate_sample_num_per_epoch=1000)
trainer.train()

# 매개변수 보관
network.save_params("deep_convnet_params.pkl")
print("Saved Network Parameters!")
Exemplo n.º 20
0
def cnn_constructor():
    """
    Referenced by https://github.com/oreilly-japan/deep-learning-from-scratch
    common modules referenced there too.
    """

    global network, classes, imsize

    (x_train, t_train), (x_test,
                         t_test), classes = dataset(image_dir="images",
                                                    test_percentage=10,
                                                    validation_percentage=10,
                                                    imsize=imsize)

    x_train = chenneling(x_train)
    x_test = chenneling(x_test)

    train_num = x_train.shape[0]
    test_num = x_test.shape[0]

    x_train, t_train = shuffle_dataset(x_train, t_train)
    x_test, t_test = shuffle_dataset(x_test, t_test)

    net_param = "cnn_params" + str(imsize) + ".pkl"
    if not os.path.exists("params/"):
        os.makedirs("params/")

    # make convolution eural network
    # x_train.shape[1:] returns channel, height, width
    network = ConvNet(input_dim=(x_train.shape[1:]),
                      conv_param={
                          'filter_num': 20,
                          'filter_size': 3,
                          'pad': 0,
                          'stride': 1
                      },
                      hidden_size=32,
                      output_size=classes,
                      weight_init_std=0.001)

    trainer = Trainer(network,
                      x_train,
                      t_train,
                      x_test,
                      t_test,
                      epochs=1,
                      mini_batch_size=FLAGS.batch_size,
                      optimizer='Adam',
                      optimizer_param={'lr': 0.001},
                      evaluate_sample_num_per_epoch=train_num)

    params_loaded = False
    if not os.path.exists("params/"):
        os.makedirs("params/")
    if (os.path.exists("params/" + net_param)):
        network.load_params("params/" + net_param)
        params_loaded = True
        print("\n* Loaded Network Parameters!  -  " + net_param)
    if ((FLAGS.train_epochs > 0) or (params_loaded == False)):
        if (FLAGS.train_epochs <= 0):
            FLAGS.train_epochs = 10
        # Training
        for ep in range(FLAGS.train_epochs):
            trainer.train()
            # Save parameters
            network.save_params("params/" + net_param)

            # plot graphs
            # Grpah 1: Accuracy
            markers = {'train': 'o', 'test': 's', 'loss': 'd'}
            x1 = np.arange(len(trainer.train_acc_list))
            plt.clf()
            plt.plot(x1,
                     trainer.train_acc_list,
                     marker='o',
                     label='train',
                     markevery=1)
            plt.plot(x1,
                     trainer.test_acc_list,
                     marker='s',
                     label='test',
                     markevery=1)
            plt.xlabel("epochs")
            plt.ylabel("accuracy")
            plt.ylim(0, 1.1)
            plt.legend(loc='lower right')
            plt.title("Accuracy")
            now = datetime.now()
            filename = "params/" + now.strftime(
                '%Y%m%d_%H%M%S%f') + "_" + "ep" + ".png"
            plt.savefig(filename)
            #plt.show()

            # Graph 2: Loss
            x2 = np.arange(len(trainer.train_loss_list))
            plt.clf()
            plt.plot(x2,
                     trainer.train_loss_list,
                     marker='o',
                     label='loss',
                     markevery=1)
            plt.xlabel("iter")
            plt.ylabel("loss")
            plt.legend(loc='lower right')
            plt.title("Cross entropy loss")
            now = datetime.now()
            filename = "params/" + now.strftime(
                '%Y%m%d_%H%M%S%f') + "_" + "ep" + ".png"
            plt.savefig(filename)
            #plt.show()
        print("\n* Saved Network Parameters!  -  " + net_param)