Beispiel #1
0
    print(data_loaders)
    print(data_sizes)

    res_loss = dict()
    res_top1_acc = dict()
    res_top5_acc = dict()
    num_classes = 100
    num_epochs = 50
    for name in ['3e-4 -> 1e-4', '3e-4 -> 3e-5', '3e-4 -> 0']:
        model = SqueezeNet(num_classes=num_classes)
        model.eval()
        # print(model)
        model = model.to(device)

        criterion = SmoothLabelCritierion(label_smoothing=0.1)
        optimizer = optim.Adam(model.parameters(), lr=3e-4, weight_decay=3e-5)
        if name == '3e-4 -> 1e-4':
            lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, num_epochs - 5, eta_min=1e-4)
        elif name == '3e-4 -> 3e-5':
            lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, num_epochs - 5, eta_min=3e-5)
        else:
            lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, num_epochs - 5, eta_min=0)
        warmup_scheduler = GradualWarmupScheduler(optimizer, multiplier=1, total_epoch=5, after_scheduler=lr_scheduler)
        optimizer.zero_grad()
        optimizer.step()
        warmup_scheduler.step()

        util.check_dir('../data/models/')
        best_model, loss_dict, top1_acc_dict, top5_acc_dict = train_model(
            data_loaders, data_sizes, name, model, criterion, optimizer, warmup_scheduler,
            num_epochs=num_epochs, device=device)
Beispiel #2
0
        optimizer.step()

    return losses


if __name__ == '__main__':
    device = util.get_device()
    # device = torch.device('cpu')

    data_loader = load_data()
    num_classes = 100

    res_dict = dict()
    for weight_decay in [0, 1e-3, 1e-4, 1e-5]:
        # for weight_decay in [3e-5, 1e-4, 3e-4]:
        model = SqueezeNet(num_classes=num_classes)
        model.eval()
        # print(model)
        model = model.to(device)

        criterion = SmoothLabelCritierion(label_smoothing=0.1)
        optimizer = optim.Adam(model.parameters(),
                               lr=3e-4,
                               weight_decay=weight_decay)

        losses = find_wd(data_loader, model, criterion, optimizer, device)
        res_dict[str(weight_decay)] = {'loss': losses}
        print('{} done'.format(weight_decay))
    util.plot_loss_lr(res_dict)
    print('done')
    # 加载为c, 存储于CPU
    c = torch.load('a.pth', map_location=lambda storage, loc: storage)

    # 加载为d, 存储于GPU0上
    d = torch.load('a.pth', map_location={'cuda:1': 'cuda:0'})

# In[40]:

torch.set_default_tensor_type('torch.FloatTensor')
from torchvision.models import SqueezeNet
model = SqueezeNet()
# module的state_dict是一个字典
model.state_dict().keys()

# Module对象的保存与加载
torch.save(model.state_dict(), 'squeezenet.pth')
model.load_state_dict(torch.load('squeezenet.pth'))

optimizer = torch.optim.Adam(model.parameters(), lr=0.1)

torch.save(optimizer.state_dict(), 'optimizer.pth')
optimizer.load_state_dict(torch.load('optimizer.pth'))

all_data = dict(optimizer=optimizer.state_dict(),
                model=model.state_dict(),
                info=u'模型和优化器的所有参数')
torch.save(all_data, 'all.pth')

all_data = torch.load('all.pth')
all_data.keys()
Beispiel #4
0
    print(data_sizes)

    res_loss = dict()
    res_top1_acc = dict()
    res_top5_acc = dict()
    num_classes = 100
    num_epochs = 10
    for name in ['lr=1e-3', 'lr=3e-4']:
        model = SqueezeNet(num_classes=num_classes)
        model.eval()
        # print(model)
        model = model.to(device)

        criterion = SmoothLabelCritierion(label_smoothing=0.1)
        if name == 'lr=1e-3':
            optimizer = optim.Adam(model.parameters(), lr=1e-3)
        else:
            optimizer = optim.Adam(model.parameters(), lr=3e-4)
        lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(
            optimizer, num_epochs)

        util.check_dir('../data/models/')
        best_model, loss_dict, top1_acc_dict, top5_acc_dict = train_model(
            data_loaders,
            data_sizes,
            name,
            model,
            criterion,
            optimizer,
            lr_scheduler,
            num_epochs=num_epochs,