Beispiel #1
0
def train_and_test(model, train_loader, test_loader, epochs, lr, momentum,
                   log_interval):
    optimizer = optim.SGD(model.parameters(), lr=lr, momentum=momentum)
    criterion = nn.CrossEntropyLoss()

    for epoch in range(1, epochs + 1):
        train(model, train_loader, optimizer, criterion, epoch, log_interval)
        test(model, test_loader, criterion)
Beispiel #2
0
def _train(lr, batch_size, hidden_sizes, epoch_num, model_name):
    global is_training, trainingData, lock

    num_iters = int(epoch_num * 60000.0 / batch_size)
    net = Net(hidden_sizes = hidden_sizes, batch_size = batch_size,
            lr = lr)
    mndata = MNIST('./mnist')
    print("Loading mnist training set...")
    mnist_img, mnist_label = mndata.load_training()
    mnist_img = np.array(mnist_img) / 255.0
    func.train(net, mnist_img, mnist_label, num_iters, 
            join(MODEL_DIR, model_name + '.npy'), 
            trainingData = trainingData, lock = lock,
            training_flag = is_training)

    print("Loading mnist testing set...")
    test_img, test_label = mndata.load_testing()
    test_img = np.array(test_img) / 255.0

    lock.acquire()
    trainingData['eval'] = func.eval(net, test_img, test_label)
    is_training['value'] = False
    lock.release()
Beispiel #3
0
    cnn = myUpSamplingAE(WIDTH // 2, HEIGHT // 2, CHANNELS)

    ### ここから下は,必要に応じて書き換えると良い ###

    # 追加条件の指定
    conditions = {}
    conditions['in_channels'] = CHANNELS  # 入力画像のチャンネル数が 3(カラー画像)
    conditions['out_channels'] = CHANNELS  # 出力画像のチャンネル数も 3(カラー画像)
    conditions['input_scale'] = 0.5  # 本来のVGGFace2顔画像を縦横半分に(0.5倍)して入力画像とする

    # 学習処理
    cnn = train(
        device=dev,  # 使用するGPUのID,変えなくて良い
        model_dir=MODEL_DIR,  # 一時ファイルを保存するフォルダ,変えなくて良い
        in_data=imgfiles,  # モデルの入力データ,今回はVGGFace2顔画像(ただし縦横を半分にして使用)
        out_data=imgfiles,  # モデルの出力データ,今回はVGGFace2顔画像
        model=cnn,  # 学習するネットワークモデル
        loss_func=nn.L1Loss(),  # 損失関数,今回は mean absolute error
        batchsize=batchsize,  # バッチサイズ
        epochs=epochs,  # 総エポック数
        stepsize=10,  # 高速化のため,ミニバッチ10個につき1個しか学習に用いないことにする
        additional_conditions=conditions  # 上で指定した追加条件
    )

    ### ここまで ###

    # 最終結果のモデルをファイルに保存
    torch.save(cnn.to('cpu').state_dict(), model_filepath)

    print('', file=sys.stderr)
Beispiel #4
0
    x_train, y_train, x_test = f.load_fashionmnist()  # 訓練データとテストデータの読み込み

    # weights
    W = np.random.uniform(low=-0.08, high=0.08,
                          size=(784, 10)).astype('float32')
    b = np.zeros(shape=(10, )).astype('float32')

    # # 学習データと検証データに分割
    # x_train, x_valid, y_train, y_valid = train_test_split(x_train, y_train, test_size=0.1)

    for epoch in range(1000):
        x_train, y_train = shuffle(x_train, y_train)
        x_train_k, x_valid_k, y_train_k, y_valid_k = train_test_split(
            x_train, y_train, test_size=0.1)
        cost = f.train(x_train, y_train, W, b, eps=1.0)
        valid_cost, y_pred = f.valid(x_valid_k, y_valid_k, W, b)
        if epoch % 10 == 9 or epoch == 0:
            print(
                'EPOCH: {}, Valid Cost: {:.3f}, Valid Accuracy: {:.3f}'.format(
                    epoch + 1, valid_cost,
                    accuracy_score(y_valid_k.argmax(axis=1),
                                   y_pred.argmax(axis=1))))

            epochs.append(epoch + 1)
            valid_costs.append(valid_cost)
            valid_accuracies.append(
                accuracy_score(y_valid_k.argmax(axis=1),
                               y_pred.argmax(axis=1)))

    fig = plt.figure()
device = f.device()  # 选择训练模式(GPU)
print('训练模式:', device, '模式')
# 残差网络(18指定的是带有权重的18层,包括卷积层和全连接层,不包括池化层和BN层)
# pretrained=True   使用预训练模型
# 使用resnet18模型
transfer_model = models.resnet18(pretrained=True)
for param in transfer_model.parameters():
    # 屏蔽预训练模型的权重,只训练最后一层的全连接的权重
    param.requires_grad = False
# 修改最后一层维数,即 把原来的全连接层 替换成 输出维数为2的全连接层
# 提取fc层中固定的参数
dim = transfer_model.fc.in_features
# 设置网络中的全连接层为2
transfer_model.fc = nn.Linear(dim, 2)
# 构建神经网络
net = transfer_model.to(device)

# 分类问题——交叉熵损失函数
criterion = nn.CrossEntropyLoss()
# 优化器——随机梯度下降
# 学习率lr=10^-3;
optimizer = torch.optim.SGD(net.fc.parameters(), lr=lr)
# optimizer = torch.optim.Adam(net.parameters(), lr=lr)
for epoch in range(n_epoch):
    print('第{}次训练'.format(epoch + 1))
    f.train(net, optimizer, device, criterion, train_loader)
    f.validate(net, device, val_loader)

# 仅保存和加载模型参数
torch.save(net.state_dict(), save_path)
Beispiel #6
0
    cnn = myDenoisingAE(WIDTH, HEIGHT, CHANNELS)

    ### ここから下は,必要に応じて書き換えると良い ###

    # 追加条件の指定
    conditions = {}
    conditions['in_channels'] = CHANNELS  # 入力画像のチャンネル数が 3(カラー画像)
    conditions['out_channels'] = CHANNELS  # 出力画像のチャンネル数も 3(カラー画像)
    conditions['input_with_noise'] = 100  # 入力画像にごま塩ノイズを 100 点分挿入する

    # 学習処理
    cnn = train(
        device=dev,  # 使用するGPUのID,変えなくて良い
        model_dir=MODEL_DIR,  # 一時ファイルを保存するフォルダ,変えなくて良い
        in_data=imgfiles,  # モデルの入力データ,今回はCIFAR10物体画像(ただしごま塩ノイズを挿入)
        out_data=imgfiles,  # モデルの出力データ,今回はCIFAR10物体画像
        model=cnn,  # 学習するネットワークモデル
        loss_func=nn.MSELoss(),  # 損失関数,今回は mean squared error
        batchsize=batchsize,  # バッチサイズ
        epochs=epochs,  # 総エポック数
        stepsize=10,  # 高速化のため,ミニバッチ10個につき1個しか学習に用いないことにする
        additional_conditions=conditions  # 上で指定した追加条件
    )

    ### ここまで ###

    # 最終結果のモデルをファイルに保存
    torch.save(cnn.to('cpu').state_dict(), model_filepath)

    print('', file=sys.stderr)
Beispiel #7
0
    # ネットワークモデルの作成
    cnn = myCNN2(WIDTH, HEIGHT, n_classes)

    ### ここから下は,必要に応じて書き換えると良い ###

    # 追加条件の指定
    conditions = {}
    conditions['in_channels'] = CHANNELS  # 入力画像のチャンネル数が 3(カラー画像)

    # 学習処理
    cnn = train(
        device=dev,  # 使用するGPUのID,変えなくて良い
        model_dir=MODEL_DIR,  # 一時ファイルを保存するフォルダ,変えなくて良い
        in_data=imgfiles,  # モデルの入力データ,今回はMNIST画像
        out_data=labels,  # モデルの出力データ,今回はクラスラベル
        model=cnn,  # 学習するネットワークモデル
        loss_func=nn.CrossEntropyLoss(),  # 損失関数,今回は softmax cross entropy
        batchsize=batchsize,  # バッチサイズ
        epochs=epochs,  # 総エポック数
        stepsize=10,  # 高速化のため,ミニバッチ10個につき1個しか学習に用いないことにする
        additional_conditions=conditions  # 上で指定した追加条件
    )

    ### ここまで ###

    # 学習結果のモデルをファイルに保存
    torch.save(cnn.state_dict(), model_filepath)

    print('', file=sys.stderr)
Beispiel #8
0
            "\n################ Training Phase 1 - ANN for {} Epochs ################\n"
            .format(epochs1))
        ann_logs = {
            "train_acc_1": [],
            "train_acc_2": [],
            "test_acc_1": [],
            "test_acc_2": []
        }
        best_acc = 0
        for epoch in range(epochs1):
            print("============ ANN1 - epoch {} / {}".format(
                epoch + 1, epochs1))
            _, train_acc = func.train(net,
                                      "ann",
                                      train_loader_1,
                                      optimizer,
                                      device,
                                      epoch + 1,
                                      loss_f=loss_ann)
            _, test_acc = func.test(net,
                                    "ann",
                                    test_loader_1,
                                    device,
                                    loss_f=loss_ann)

            utils.debug_print(debug)
            if save_k > 0 and (epoch + 1) % save_k == 0:
                func.save_model(
                    net,
                    os.path.join("saved_models", "train_seq",
                                 "ann_{}.pth".format(epoch + 1)))