コード例 #1
0
def run_mnist_training(batch_size, epochs, lr, log_interval, device, file):
    test_batch_size = 1000
    accuracy = []
    acc = 0
    transform = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize((0.1307, ), (0.3981, ))])

    train_set = datasets.MNIST('../data',
                               train=True,
                               download=True,
                               transform=transform)
    test_set = datasets.MNIST('../data', train=False, transform=transform)

    train_loader = torch.utils.data.DataLoader(train_set,
                                               batch_size=batch_size)
    test_loader = torch.utils.data.DataLoader(test_set,
                                              batch_size=test_batch_size)

    PATH = './models/MNISTandSVHN/MNIST.pth'

    model = M_Network().to(device)
    optimizer = optim.SGD(model.parameters(), lr=lr)

    #Training the model
    for epoch in range(1, epochs + 1):
        accuracy.append(
            train(log_interval, model, device, train_loader, optimizer, epoch))

    torch.save(model.state_dict(), PATH)

    #Generating Confusion Matrix for test
    _, true, pred = test(model, device, test_loader)

    cm = confusion_matrix(true, pred)
    names = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    plt.figure(figsize=(10, 10))
    plot_confusion_matrix(cm, names, t='MNIST Confusion Matrix')

    f1 = f1_score(true, pred, average='micro')
    acc = accuracy_score(true, pred)

    #Write test acc to file
    file1 = open(file, "a")
    write_string = "MNIST Accuracy: " + str(acc) + "\t F1: " + str(f1) + "\n"
    file1.write(write_string)
    file1.close()

    #Plotting ROC
    plot_roc(model,
             device,
             test_loader,
             num_classes=10,
             t='MNIST ROC',
             mode='single')

    return accuracy
コード例 #2
0
ファイル: ResNet18.py プロジェクト: hmn12/DeepLearningETHZ
    num_ftrs = model_conv.fc.in_features
    model_conv.fc = nn.Linear(num_ftrs, nb_classes)

    if torch.cuda.is_available():
        model_conv = model_conv.cuda()

    loss_fn = nn.CrossEntropyLoss().type(dtype)

    # Observe that only parameters of final layer are being optimized as
    # opoosed to before.
    optimizer_conv = optim.Adam(model_conv.fc.parameters(), lr=1e-3)

    train_acc = []
    val_acc = []

    results = train(model_conv, loss_fn, optimizer_conv, loader_train, loader_val, num_epochs = 5)
    resultfile1 = write_results(results)
    resultfile1.to_csv(os.path.join(os.path.curdir, resultfilename1))
    test_accuracy = check_accuracy(model_conv, loader_test)
    print('Test accuracy after training last layer: {}'.format(test_accuracy))




    # now we allow all of the network to change, but by less
    for param in model_conv.parameters():
        param.requires_grad = True

    optimizer_conv = optim.Adam(model_conv.parameters(), lr=1e-10)

    results = train(model_conv, loss_fn, optimizer_conv, loader_train, loader_val, num_epochs = 1)
コード例 #3
0
tensor_trainY = torch.Tensor(trainY)
train_dataset = TensorDataset(tensor_trainX, tensor_trainY) # create your datset
train_dataloader = DataLoader(train_dataset, batch_size=BATCH_SIZE)

model = get_current_model()
model = model.to(device)
print('model', model)


loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=LEARNING_RATE)
optimizer_name = "Adam"

print("Beginning to train")
#(train_dataloader, model, loss_fn, optimzer, epochs, device)
loss_history, accuracy_history = help.train(train_dataloader, model, loss_fn, optimizer, EPOCHS, device)
model_filepath = 'saved_models/cnn_1.pt'
torch.save(model.state_dict(), model_filepath)

best_loss = round(min(loss_history), 3)
best_acc = round(max(accuracy_history), 3)
#print(f"Best training accuracy: {best_acc}")

acc_filename = f"plots/training_accuracy_cnn_1.png"
help.plot_history(accuracy_history, 'accuracy', acc_filename)

loss_filename = f"plots/training_loss_cnn_1.png"
help.plot_history(loss_history, 'loss', loss_filename)

print('Beginning to test')
tensor_testX = torch.Tensor(testX)
コード例 #4
0
def run_svhn_training(batch_size, epochs, lr, log_interval, device, file):
    accuracy = []
    acc = 0

    transform = transforms.Compose(
        [transforms.CenterCrop((28, 28)),
         transforms.ToTensor()])

    train_set = datasets.SVHN('../data',
                              split='train',
                              transform=transform,
                              target_transform=None,
                              download=False)
    train_loader = torch.utils.data.DataLoader(train_set,
                                               batch_size=batch_size,
                                               shuffle=True)

    test_set = datasets.SVHN('../data',
                             split='test',
                             transform=transform,
                             target_transform=None,
                             download=False)
    test_loader = torch.utils.data.DataLoader(test_set,
                                              batch_size=batch_size,
                                              shuffle=True)

    model = S_Network().to(device)
    optimizer = optim.SGD(model.parameters(), lr=lr)

    for epoch in range(1, epochs + 1):
        accuracy.append(
            train(log_interval, model, device, train_loader, optimizer, epoch))

    PATH = './models/MNISTandSVHN/SVHN.pth'
    torch.save(model.state_dict(), PATH)

    #Generating Confusion Matrix for test
    _, true, pred = test(model, device, test_loader)

    cm = confusion_matrix(true, pred)
    names = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')
    plt.figure(figsize=(10, 10))
    plot_confusion_matrix(cm, names, t='SVHN Confusion Matrix')

    f1 = f1_score(true, pred, average='micro')
    acc = accuracy_score(true, pred)

    #Write test acc to file
    file1 = open(file, "a")
    write_string = "SVHN Accuracy: " + str(acc) + "\t F1: " + str(f1) + "\n"
    file1.write(write_string)
    file1.close()

    #Plotting ROC
    plot_roc(model,
             device,
             test_loader,
             num_classes=10,
             t='SVHN ROC',
             mode='single')

    return accuracy
コード例 #5
0
                        help='image for transformation or viewing',
                        metavar='IMAGE_PATH')
    parser.add_argument('-o',
                        type=str,
                        dest='image_output_path',
                        help='image output path',
                        metavar='IMAGE_OUTPUT_PATH')
    parser.add_argument('--iters',
                        type=int,
                        dest='iters',
                        help='iter times, only for temp_view mode',
                        metavar='ITER_TIMES',
                        default=500)

    return parser


if __name__ == '__main__':
    parser = build_parser()
    args = parser.parse_args()

    with open(args.config_path) as f_config:
        options = json.load(f_config)

    if args.mode == 'train':
        train(options)
    elif args.mode == 'predict':
        predict(options, args.image_path, args.image_output_path)
    elif args.mode == 'temp_view':
        temp_view(options, args.image_path, args.image_output_path, args.iters)