zoukankan      html  css  js  c++  java
  • Pytorch 多分类问题

    #########################################full connection###########################################
    import torch
    from torchvision import transforms
    from torchvision import datasets
    from torch.utils.data import DataLoader
    import torch.nn.functional as F
    import torch.optim as optim

    batch_size = 64
    transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
    #mean,Std
    ])
    train_dataset = datasets.MNIST(root='../dataset/mnist/',
    train=True,
    download=True,
    transform=transform)
    train_loader = DataLoader(train_dataset,
    shuffle=True,
    batch_size=batch_size)

    test_dataset = datasets.MNIST(root='../dataset/mnist/',
    train=False,
    download=True,
    transform=transform)
    test_loader = DataLoader(test_dataset,
    shuffle=True,
    batch_size=batch_size)


    class Net(torch.nn.Module):
    def __init__(self):
    super(Net, self).__init__()
    self.l1 = torch.nn.Linear(784, 512)
    self.l2 = torch.nn.Linear(512, 256)
    self.l3 = torch.nn.Linear(256, 128)
    self.l4 = torch.nn.Linear(128, 64)
    self.l5 = torch.nn.Linear(64, 10)

    def forward(self, x):
    x = x.view(-1, 784)
    x = F.relu(self.l1(x))
    x = F.relu(self.l2(x))
    x = F.relu(self.l3(x))
    x = F.relu(self.l4(x))
    return self.l5(x)


    model = Net()
    criterion = torch.nn.CrossEntropyLoss()
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)


    def train(epoch):
    running_loss = 0.0
    for batch_idx, data in enumerate(train_loader,0):
    inputs, target = data
    optimizer.zero_grad()
    # forward + backward + update
    outputs = model(inputs)
    loss = criterion(outputs, target)
    loss.backward()
    optimizer.step()
    running_loss += loss.item()
    if batch_idx % 300 == 299:
    print('[%d,%5d] loss: %.3f' % (epoch + 1, batch_idx +1, running_loss / 300))
    running_loss = 0.0

    def test():
    correct = 0
    total = 0
    # 不计算梯度
    with torch.no_grad():
    for data in test_loader:
    images, labels = data
    outputs = model(images)
    _, predicted = torch.max(outputs.data, dim=1)
    #max,index of max
    total += labels.size(0)
    correct += (predicted == labels).sum().item()
    print('Accuracy on test set: %d %%' %(100 * correct / total))


    if __name__ == '__main__':
    for epoch in range(10):
    train(epoch)
    test()
    ===============================================================================================================================================

    [1, 300] loss: 2.204

    1654784it [00:44, 43276.74it/s][1, 600] loss: 0.904
    [1, 900] loss: 0.420
    Accuracy on test set: 90 %
    [2, 300] loss: 0.305
    [2, 600] loss: 0.263
    [2, 900] loss: 0.222
    Accuracy on test set: 93 %
    [3, 300] loss: 0.183
    [3, 600] loss: 0.168
    [3, 900] loss: 0.148
    Accuracy on test set: 95 %
    [4, 300] loss: 0.132
    [4, 600] loss: 0.118
    [4, 900] loss: 0.116
    Accuracy on test set: 96 %
    [5, 300] loss: 0.097
    [5, 600] loss: 0.095
    [5, 900] loss: 0.092
    Accuracy on test set: 96 %
    [6, 300] loss: 0.074
    [6, 600] loss: 0.079
    [6, 900] loss: 0.078
    Accuracy on test set: 97 %
    [7, 300] loss: 0.065
    [7, 600] loss: 0.061
    [7, 900] loss: 0.061
    Accuracy on test set: 97 %
    [8, 300] loss: 0.050
    [8, 600] loss: 0.050
    [8, 900] loss: 0.052
    Accuracy on test set: 97 %
    [9, 300] loss: 0.038
    [9, 600] loss: 0.047
    [9, 900] loss: 0.041
    Accuracy on test set: 97 %
    [10, 300] loss: 0.031
    [10, 600] loss: 0.038
    [10, 900] loss: 0.034
    Accuracy on test set: 97 %

    9920512it [09:12, 17950.01it/s]
    1654784it [05:37, 4904.61it/s]

    Process finished with exit code 0

    #####################################CNN##############################################

    import torch
    from torchvision import transforms
    from torchvision import datasets
    from torch.utils.data import DataLoader
    import torch.nn.functional as F
    import torch.optim as optim

    batch_size = 64
    transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
    #mean,Std
    ])
    train_dataset = datasets.MNIST(root='../dataset/mnist/',
    train=True,
    download=True,
    transform=transform)
    train_loader = DataLoader(train_dataset,
    shuffle=True,
    batch_size=batch_size)

    test_dataset = datasets.MNIST(root='../dataset/mnist/',
    train=False,
    download=True,
    transform=transform)
    test_loader = DataLoader(test_dataset,
    shuffle=True,
    batch_size=batch_size)


    class Net(torch.nn.Module):
    def __init__(self):
    super(Net, self).__init__()
    self.conv1 = torch.nn.Conv2d(1, 10, kernel_size=5)
    self.conv2 = torch.nn.Conv2d(10, 20, kernel_size=5)
    self.pooling = torch.nn.MaxPool2d(2)
    self.fc = torch.nn.Linear(320, 10)

    def forward(self, x):
    # Flatten data from (n, 1, 28, 28) to (n, 784)
    batch_size = x.size(0)
    x = F.relu(self.pooling(self.conv1(x)))
    x = F.relu(self.pooling(self.conv2(x)))
    x = x.view(batch_size, -1) # flatten
    x = self.fc(x)
    return x

    model = Net()
    criterion = torch.nn.CrossEntropyLoss()
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)


    def train(epoch):
    running_loss = 0.0
    for batch_idx, data in enumerate(train_loader,0):
    inputs, target = data
    optimizer.zero_grad()
    # forward + backward + update
    outputs = model(inputs)
    loss = criterion(outputs, target)
    loss.backward()
    optimizer.step()
    running_loss += loss.item()
    if batch_idx % 300 == 299:
    print('[%d,%5d] loss: %.3f' % (epoch + 1, batch_idx +1, running_loss / 300))
    running_loss = 0.0

    def test():
    correct = 0
    total = 0
    # 不计算梯度
    with torch.no_grad():
    for data in test_loader:
    images, labels = data
    outputs = model(images)
    _, predicted = torch.max(outputs.data, dim=1)
    #max,index of max
    total += labels.size(0)
    correct += (predicted == labels).sum().item()
    print('Accuracy on test set: %d %%' %(100 * correct / total))


    if __name__ == '__main__':
    for epoch in range(10):
    train(epoch)
    test()
    ====================================================================================

    [1, 300] loss: 0.720
    [1, 600] loss: 0.181
    [1, 900] loss: 0.128
    Accuracy on test set: 96 %
    [2, 300] loss: 0.108
    [2, 600] loss: 0.098
    [2, 900] loss: 0.088
    Accuracy on test set: 97 %
    [3, 300] loss: 0.076
    [3, 600] loss: 0.079
    [3, 900] loss: 0.071
    Accuracy on test set: 98 %
    [4, 300] loss: 0.066
    [4, 600] loss: 0.063
    [4, 900] loss: 0.062
    Accuracy on test set: 98 %
    [5, 300] loss: 0.060
    [5, 600] loss: 0.052
    [5, 900] loss: 0.055
    Accuracy on test set: 98 %
    [6, 300] loss: 0.051
    [6, 600] loss: 0.050
    [6, 900] loss: 0.050
    Accuracy on test set: 98 %
    [7, 300] loss: 0.045
    [7, 600] loss: 0.047
    [7, 900] loss: 0.049
    Accuracy on test set: 98 %
    [8, 300] loss: 0.044
    [8, 600] loss: 0.043
    [8, 900] loss: 0.041
    Accuracy on test set: 98 %
    [9, 300] loss: 0.038
    [9, 600] loss: 0.038
    [9, 900] loss: 0.045
    Accuracy on test set: 98 %
    [10, 300] loss: 0.037
    [10, 600] loss: 0.037
    [10, 900] loss: 0.043
    Accuracy on test set: 98 %

    Process finished with exit code 0

















  • 相关阅读:
    老罗Android开发视频教程录制计划
    经典游戏源码汇总
    横向TimePicker带三角指示器
    可延长、缩短、拖动图形的画图软件
    手把手教你写android项目@第一期项目——身份证查询创新
    android图表引擎AchartEngine制作柱图
    SharePoint2010如何配置唯一文档ID服务快速生效
    SharePoint客户端对象模型 - .NET托管
    JQuery里如何选择超链接
    如何在SharePointDesigner订制页面里判断用户权限
  • 原文地址:https://www.cnblogs.com/songyuejie/p/14942359.html
Copyright © 2011-2022 走看看