Pytorch基础篇--2

作者: 布口袋_天晴了 | 来源:发表于2019-07-19 15:02 被阅读2次

    源码:github code
    pytorch逻辑回归的例子
    手写数字识别数据从官网下载太慢,可以从这下载:百度网盘

    import torch
    import torch.nn as nn
    import torchvision
    import torchvision.transforms as transforms
    
    # Hyper-parameters
    # 超参设置
    input_size = 784
    num_classes = 10
    num_epochs = 5
    batch_size = 100
    learning_rate = 0.001
    
    # MNIST dataset (images and labels)
    # 手写数字识别数据下载
    train_dataset = torchvision.datasets.MNIST(root='../../data',
                                               train=True,
                                               transform=transforms.ToTensor(),
                                               download=True)
    
    test_dataset = torchvision.datasets.MNIST(root='../../data',
                                              train=False,
                                              transform=transforms.ToTensor())
    
    # Data loader (input pipeline)
    # 数据加载
    train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
                                               batch_size=batch_size,
                                               shuffle=True)
    
    test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
                                              batch_size=batch_size,
                                              shuffle=False)
    
    # Logistic regression model
    # 逻辑回归模型
    model = nn.Linear(input_size, num_classes)
    
    # Loss and optimizer
    # nn.CrossEntropyLoss() computes softmax internally
    # 交叉熵损失函数
    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
    
    # Train the model
    # 模型训练
    total_step = len(train_loader)
    for epoch in range(num_epochs):
        for i, (images, labels) in enumerate(train_loader):
            # Reshape images to (batch_size, input_size)
            images = images.reshape(-1, 28 * 28)
    
            # Forward pass
            outputs = model(images)
            loss = criterion(outputs, labels)
    
            # Backward and optimize
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
    
            if (i + 1) % 100 == 0:
                print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'
                      .format(epoch + 1, num_epochs, i + 1, total_step, loss.item()))
    
    # Test the model
    # 模型测试
    # In test phase, we don't need to compute gradients (for memory efficiency)
    with torch.no_grad():
        correct = 0
        total = 0
        for images, labels in test_loader:
            images = images.reshape(-1, 28 * 28)
            outputs = model(images)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum()
    
        print('Accuracy of the model on the 10000 test images: {} %'.format(100 * correct / total))
    
    # Save the model checkpoint
    # 模型保存
    torch.save(model.state_dict(), 'model.ckpt')
    
    数据下载位置

    相关文章

      网友评论

        本文标题:Pytorch基础篇--2

        本文链接:https://www.haomeiwen.com/subject/ycwjlctx.html