Pytorch入门 2.2 deep residual network

# ---------------------------------------------------------------------------- #
# An implementation of https://arxiv.org/pdf/1512.03385.pdf                    #
# See section 4.2 for the model architecture on CIFAR-10                       #
# Some part of the code was referenced from below                              #
# https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py   #
# ---------------------------------------------------------------------------- #

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms


# Device configuration  配置设备,GPU加速
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# Hyper-parameters   超参数配置 : epochs 和学习率
num_epochs = 80
learning_rate = 0.001

# Image preprocessing modules
transform = transforms.Compose([
    transforms.Pad(4),
    transforms.RandomHorizontalFlip(),
    transforms.RandomCrop(32),
    transforms.ToTensor()])

torchvision.transforms这个包中包含resize、crop等常见的data augmentation操作,基本上PyTorch中的data augmentation操作都可以通过该接口实现。该包主要包含两个脚本:transformas.py和functional.py,前者定义了各种data augmentation的类,在每个类中通过调用functional.py中对应的函数完成data augmentation操作。

有兴趣的可以对pytorch源码进行学习

class Compose(object):
    """Composes several transforms together.
    Args:
        transforms (list of ``Transform`` objects): list of transforms to compose.
    Example:
        >>> transforms.Compose([
        >>>     transforms.CenterCrop(10),
        >>>     transforms.ToTensor(),
        >>> ])
    """

    def __init__(self, transforms):
        self.transforms = transforms

    def __call__(self, img):
        for t in self.transforms:
            img = t(img)
        return img

    def __repr__(self):
        format_string = self.__class__.__name__ + '('
        for t in self.transforms:
            format_string += '\n'
            format_string += '    {0}'.format(t)
        format_string += '\n)'
        return format_string

回到ResNet 的代码


# CIFAR-10 dataset
train_dataset = torchvision.datasets.CIFAR10(root='../../data/',
                                             train=True, 
                                             transform=transform,
                                             download=True)

test_dataset = torchvision.datasets.CIFAR10(root='../../data/',
                                            train=False,  
                                            transform=transforms.ToTensor())

# Data loader
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
                                           batch_size=100, 
                                           shuffle=True)

test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
                                          batch_size=100, 
                                          shuffle=False)

# 3x3 convolution
def conv3x3(in_channels, out_channels, stride=1):
    return nn.Conv2d(in_channels, out_channels, kernel_size=3, 
                     stride=stride, padding=1, bias=False)

# Residual block
class ResidualBlock(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1, downsample=None):
        super(ResidualBlock, self).__init__()
        self.conv1 = conv3x3(in_channels, out_channels, stride)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.relu = nn.ReLU(inplace=True)
        self.conv2 = conv3x3(out_channels, out_channels)
        self.bn2 = nn.BatchNorm2d(out_channels)
        self.downsample = downsample
        
    def forward(self, x):
        residual = x
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        if self.downsample:
            residual = self.downsample(x)
        out += residual
        out = self.relu(out)
        return out

# ResNet
class ResNet(nn.Module):
    def __init__(self, block, layers, num_classes=10):
        super(ResNet, self).__init__()
        self.in_channels = 16
        self.conv = conv3x3(3, 16)
        self.bn = nn.BatchNorm2d(16)
        self.relu = nn.ReLU(inplace=True)
        self.layer1 = self.make_layer(block, 16, layers[0])
        self.layer2 = self.make_layer(block, 32, layers[1], 2)
        self.layer3 = self.make_layer(block, 64, layers[2], 2)
        self.avg_pool = nn.AvgPool2d(8)
        self.fc = nn.Linear(64, num_classes)
        
    def make_layer(self, block, out_channels, blocks, stride=1):
        downsample = None
        if (stride != 1) or (self.in_channels != out_channels):
            downsample = nn.Sequential(
                conv3x3(self.in_channels, out_channels, stride=stride),
                nn.BatchNorm2d(out_channels))
        layers = []
        layers.append(block(self.in_channels, out_channels, stride, downsample))
        self.in_channels = out_channels
        for i in range(1, blocks):
            layers.append(block(out_channels, out_channels))
        return nn.Sequential(*layers)
    
    def forward(self, x):
        out = self.conv(x)
        out = self.bn(out)
        out = self.relu(out)
        out = self.layer1(out)
        out = self.layer2(out)
        out = self.layer3(out)
        out = self.avg_pool(out)
        out = out.view(out.size(0), -1)
        out = self.fc(out)
        return out
    
model = ResNet(ResidualBlock, [2, 2, 2]).to(device)


# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

# For updating learning rate
def update_lr(optimizer, lr):    
    for param_group in optimizer.param_groups:
        param_group['lr'] = lr

# Train the model
total_step = len(train_loader)
curr_lr = learning_rate
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        images = images.to(device)
        labels = labels.to(device)
        
        # 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()))

    # Decay learning rate
    if (epoch+1) % 20 == 0:
        curr_lr /= 3
        update_lr(optimizer, curr_lr)

# Test the model
model.eval()
with torch.no_grad():
    correct = 0
    total = 0
    for images, labels in test_loader:
        images = images.to(device)
        labels = labels.to(device)
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

    print('Accuracy of the model on the test images: {} %'.format(100 * correct / total))

# Save the model checkpoint
torch.save(model.state_dict(), 'resnet.ckpt')

第一次运行下载太慢了,手动下了cifar10的压缩包 ,然后放到 data文件夹里。

Using downloaded and verified file: …/…/data/cifar-10-python.tar.gz
Epoch [1/80], Step [100/500] Loss: 1.5907
Epoch [1/80], Step [200/500] Loss: 1.5505
Epoch [1/80], Step [300/500] Loss: 1.4105
Epoch [1/80], Step [400/500] Loss: 1.3551
Epoch [1/80], Step [500/500] Loss: 1.2090
Epoch [2/80], Step [100/500] Loss: 1.2112
Epoch [2/80], Step [200/500] Loss: 1.1780
Epoch [2/80], Step [300/500] Loss: 0.8728
Epoch [2/80], Step [400/500] Loss: 1.1701
Epoch [2/80], Step [500/500] Loss: 0.9331
Epoch [3/80], Step [100/500] Loss: 0.9620
Epoch [3/80], Step [200/500] Loss: 0.8221
Epoch [3/80], Step [300/500] Loss: 0.8338
Epoch [3/80], Step [400/500] Loss: 0.9130
Epoch [3/80], Step [500/500] Loss: 0.9109
Epoch [4/80], Step [100/500] Loss: 0.8154
Epoch [4/80], Step [200/500] Loss: 0.8370
Epoch [4/80], Step [300/500] Loss: 0.9625
Epoch [4/80], Step [400/500] Loss: 0.5545
Epoch [4/80], Step [500/500] Loss: 0.7641
Epoch [5/80], Step [100/500] Loss: 0.6688
Epoch [5/80], Step [200/500] Loss: 0.7438
Epoch [5/80], Step [300/500] Loss: 0.7748
Epoch [5/80], Step [400/500] Loss: 0.8090
Epoch [5/80], Step [500/500] Loss: 0.5770
Epoch [6/80], Step [100/500] Loss: 0.7093
Epoch [6/80], Step [200/500] Loss: 0.7038
Epoch [6/80], Step [300/500] Loss: 0.7001
Epoch [6/80], Step [400/500] Loss: 0.5775
Epoch [6/80], Step [500/500] Loss: 0.4946
Epoch [7/80], Step [100/500] Loss: 0.7791
Epoch [7/80], Step [200/500] Loss: 0.7824
Epoch [7/80], Step [300/500] Loss: 0.5866
Epoch [7/80], Step [400/500] Loss: 0.6588
Epoch [7/80], Step [500/500] Loss: 0.6818
Epoch [8/80], Step [100/500] Loss: 0.6786
Epoch [8/80], Step [200/500] Loss: 0.5140
Epoch [8/80], Step [300/500] Loss: 0.5762
Epoch [8/80], Step [400/500] Loss: 0.5273
Epoch [8/80], Step [500/500] Loss: 0.5237
Epoch [9/80], Step [100/500] Loss: 0.6247
Epoch [9/80], Step [200/500] Loss: 0.5715
Epoch [9/80], Step [300/500] Loss: 0.5152
Epoch [9/80], Step [400/500] Loss: 0.5199
Epoch [9/80], Step [500/500] Loss: 0.7008
Epoch [10/80], Step [100/500] Loss: 0.5383
Epoch [10/80], Step [200/500] Loss: 0.4883
Epoch [10/80], Step [300/500] Loss: 0.5236
Epoch [10/80], Step [400/500] Loss: 0.4917
Epoch [10/80], Step [500/500] Loss: 0.6096
Epoch [11/80], Step [100/500] Loss: 0.4984
Epoch [11/80], Step [200/500] Loss: 0.5861
Epoch [11/80], Step [300/500] Loss: 0.4360
Epoch [11/80], Step [400/500] Loss: 0.5420
Epoch [11/80], Step [500/500] Loss: 0.3293
Epoch [12/80], Step [100/500] Loss: 0.4317
Epoch [12/80], Step [200/500] Loss: 0.2819
Epoch [12/80], Step [300/500] Loss: 0.4769
Epoch [12/80], Step [400/500] Loss: 0.4246
Epoch [12/80], Step [500/500] Loss: 0.5061
Epoch [13/80], Step [100/500] Loss: 0.5079
Epoch [13/80], Step [200/500] Loss: 0.3586
Epoch [13/80], Step [300/500] Loss: 0.4981
Epoch [13/80], Step [400/500] Loss: 0.4251
Epoch [13/80], Step [500/500] Loss: 0.4372
Epoch [14/80], Step [100/500] Loss: 0.3423
Epoch [14/80], Step [200/500] Loss: 0.5756
Epoch [14/80], Step [300/500] Loss: 0.3429
Epoch [14/80], Step [400/500] Loss: 0.6109
Epoch [14/80], Step [500/500] Loss: 0.4580
Epoch [15/80], Step [100/500] Loss: 0.4947
Epoch [15/80], Step [200/500] Loss: 0.3373
Epoch [15/80], Step [300/500] Loss: 0.6069
Epoch [15/80], Step [400/500] Loss: 0.5885
Epoch [15/80], Step [500/500] Loss: 0.4452
Epoch [16/80], Step [100/500] Loss: 0.3119
Epoch [16/80], Step [200/500] Loss: 0.4524
Epoch [16/80], Step [300/500] Loss: 0.4564
Epoch [16/80], Step [400/500] Loss: 0.3127
Epoch [16/80], Step [500/500] Loss: 0.3666
Epoch [17/80], Step [100/500] Loss: 0.4241
Epoch [17/80], Step [200/500] Loss: 0.3478
Epoch [17/80], Step [300/500] Loss: 0.4995
Epoch [17/80], Step [400/500] Loss: 0.4871
Epoch [17/80], Step [500/500] Loss: 0.4783
Epoch [18/80], Step [100/500] Loss: 0.5313
Epoch [18/80], Step [200/500] Loss: 0.4338
Epoch [18/80], Step [300/500] Loss: 0.3254
Epoch [18/80], Step [400/500] Loss: 0.5164
Epoch [18/80], Step [500/500] Loss: 0.3072
Epoch [19/80], Step [100/500] Loss: 0.4340
Epoch [19/80], Step [200/500] Loss: 0.4137
Epoch [19/80], Step [300/500] Loss: 0.5225
Epoch [19/80], Step [400/500] Loss: 0.4492
Epoch [19/80], Step [500/500] Loss: 0.4146
Epoch [20/80], Step [100/500] Loss: 0.3948
Epoch [20/80], Step [200/500] Loss: 0.4375
Epoch [20/80], Step [300/500] Loss: 0.4595
Epoch [20/80], Step [400/500] Loss: 0.4922
Epoch [20/80], Step [500/500] Loss: 0.2847
Epoch [21/80], Step [100/500] Loss: 0.2246
Epoch [21/80], Step [200/500] Loss: 0.3152
Epoch [21/80], Step [300/500] Loss: 0.2093
Epoch [21/80], Step [400/500] Loss: 0.3289
Epoch [21/80], Step [500/500] Loss: 0.3332
Epoch [22/80], Step [100/500] Loss: 0.3782
Epoch [22/80], Step [200/500] Loss: 0.2125
Epoch [22/80], Step [300/500] Loss: 0.3163
Epoch [22/80], Step [400/500] Loss: 0.2698
Epoch [22/80], Step [500/500] Loss: 0.2988
Epoch [23/80], Step [100/500] Loss: 0.2566
Epoch [23/80], Step [200/500] Loss: 0.3730
Epoch [23/80], Step [300/500] Loss: 0.1468
Epoch [23/80], Step [400/500] Loss: 0.3783
Epoch [23/80], Step [500/500] Loss: 0.3516
Epoch [24/80], Step [100/500] Loss: 0.2937
Epoch [24/80], Step [200/500] Loss: 0.2234
Epoch [24/80], Step [300/500] Loss: 0.2574
Epoch [24/80], Step [400/500] Loss: 0.3449
Epoch [24/80], Step [500/500] Loss: 0.2348
Epoch [25/80], Step [100/500] Loss: 0.2861
Epoch [25/80], Step [200/500] Loss: 0.2639
Epoch [25/80], Step [300/500] Loss: 0.2189
Epoch [25/80], Step [400/500] Loss: 0.1530
Epoch [25/80], Step [500/500] Loss: 0.2656
Epoch [26/80], Step [100/500] Loss: 0.2503
Epoch [26/80], Step [200/500] Loss: 0.3219
Epoch [26/80], Step [300/500] Loss: 0.2858
Epoch [26/80], Step [400/500] Loss: 0.2349
Epoch [26/80], Step [500/500] Loss: 0.2122
Epoch [27/80], Step [100/500] Loss: 0.2785
Epoch [27/80], Step [200/500] Loss: 0.3244
Epoch [27/80], Step [300/500] Loss: 0.2613
Epoch [27/80], Step [400/500] Loss: 0.4803
Epoch [27/80], Step [500/500] Loss: 0.1870
Epoch [28/80], Step [100/500] Loss: 0.4138
Epoch [28/80], Step [200/500] Loss: 0.2766
Epoch [28/80], Step [300/500] Loss: 0.2770
Epoch [28/80], Step [400/500] Loss: 0.2199
Epoch [28/80], Step [500/500] Loss: 0.1671
Epoch [29/80], Step [100/500] Loss: 0.2494
Epoch [29/80], Step [200/500] Loss: 0.3742
Epoch [29/80], Step [300/500] Loss: 0.3162
Epoch [29/80], Step [400/500] Loss: 0.1809
Epoch [29/80], Step [500/500] Loss: 0.2658
Epoch [30/80], Step [100/500] Loss: 0.1920
Epoch [30/80], Step [200/500] Loss: 0.2074
Epoch [30/80], Step [300/500] Loss: 0.4392
Epoch [30/80], Step [400/500] Loss: 0.2384
Epoch [30/80], Step [500/500] Loss: 0.2517
Epoch [31/80], Step [100/500] Loss: 0.2161
Epoch [31/80], Step [200/500] Loss: 0.1608
Epoch [31/80], Step [300/500] Loss: 0.3108
Epoch [31/80], Step [400/500] Loss: 0.3299
Epoch [31/80], Step [500/500] Loss: 0.1993
Epoch [32/80], Step [100/500] Loss: 0.2255
Epoch [32/80], Step [200/500] Loss: 0.2504
Epoch [32/80], Step [300/500] Loss: 0.2334
Epoch [32/80], Step [400/500] Loss: 0.2160
Epoch [32/80], Step [500/500] Loss: 0.1846
Epoch [33/80], Step [100/500] Loss: 0.1758
Epoch [33/80], Step [200/500] Loss: 0.2508
Epoch [33/80], Step [300/500] Loss: 0.1809
Epoch [33/80], Step [400/500] Loss: 0.2126
Epoch [33/80], Step [500/500] Loss: 0.1541
Epoch [34/80], Step [100/500] Loss: 0.2740
Epoch [34/80], Step [200/500] Loss: 0.2125
Epoch [34/80], Step [300/500] Loss: 0.2800
Epoch [34/80], Step [400/500] Loss: 0.3252
Epoch [34/80], Step [500/500] Loss: 0.1676
Epoch [35/80], Step [100/500] Loss: 0.2941
Epoch [35/80], Step [200/500] Loss: 0.3275
Epoch [35/80], Step [300/500] Loss: 0.1462
Epoch [35/80], Step [400/500] Loss: 0.1550
Epoch [35/80], Step [500/500] Loss: 0.2294
Epoch [36/80], Step [100/500] Loss: 0.1557
Epoch [36/80], Step [200/500] Loss: 0.1995
Epoch [36/80], Step [300/500] Loss: 0.2436
Epoch [36/80], Step [400/500] Loss: 0.1950
Epoch [36/80], Step [500/500] Loss: 0.2539
Epoch [37/80], Step [100/500] Loss: 0.2753
Epoch [37/80], Step [200/500] Loss: 0.2348
Epoch [37/80], Step [300/500] Loss: 0.1384
Epoch [37/80], Step [400/500] Loss: 0.3876
Epoch [37/80], Step [500/500] Loss: 0.2565
Epoch [38/80], Step [100/500] Loss: 0.2558
Epoch [38/80], Step [200/500] Loss: 0.2371
Epoch [38/80], Step [300/500] Loss: 0.1932
Epoch [38/80], Step [400/500] Loss: 0.2206
Epoch [38/80], Step [500/500] Loss: 0.3186
Epoch [39/80], Step [100/500] Loss: 0.2072
Epoch [39/80], Step [200/500] Loss: 0.3059
Epoch [39/80], Step [300/500] Loss: 0.2730
Epoch [39/80], Step [400/500] Loss: 0.2736
Epoch [39/80], Step [500/500] Loss: 0.1822
Epoch [40/80], Step [100/500] Loss: 0.1110
Epoch [40/80], Step [200/500] Loss: 0.2265
Epoch [40/80], Step [300/500] Loss: 0.1517
Epoch [40/80], Step [400/500] Loss: 0.2840
Epoch [40/80], Step [500/500] Loss: 0.2290
Epoch [41/80], Step [100/500] Loss: 0.2211
Epoch [41/80], Step [200/500] Loss: 0.1697
Epoch [41/80], Step [300/500] Loss: 0.2321
Epoch [41/80], Step [400/500] Loss: 0.3043
Epoch [41/80], Step [500/500] Loss: 0.3035
Epoch [42/80], Step [100/500] Loss: 0.2421
Epoch [42/80], Step [200/500] Loss: 0.1752
Epoch [42/80], Step [300/500] Loss: 0.2698
Epoch [42/80], Step [400/500] Loss: 0.1251
Epoch [42/80], Step [500/500] Loss: 0.1092
Epoch [43/80], Step [100/500] Loss: 0.1583
Epoch [43/80], Step [200/500] Loss: 0.2241
Epoch [43/80], Step [300/500] Loss: 0.1903
Epoch [43/80], Step [400/500] Loss: 0.2138
Epoch [43/80], Step [500/500] Loss: 0.1410
Epoch [44/80], Step [100/500] Loss: 0.2107
Epoch [44/80], Step [200/500] Loss: 0.1608
Epoch [44/80], Step [300/500] Loss: 0.1878
Epoch [44/80], Step [400/500] Loss: 0.1976
Epoch [44/80], Step [500/500] Loss: 0.1361
Epoch [45/80], Step [100/500] Loss: 0.1442
Epoch [45/80], Step [200/500] Loss: 0.2911
Epoch [45/80], Step [300/500] Loss: 0.1455
Epoch [45/80], Step [400/500] Loss: 0.2712
Epoch [45/80], Step [500/500] Loss: 0.1288
Epoch [46/80], Step [100/500] Loss: 0.2417
Epoch [46/80], Step [200/500] Loss: 0.1889
Epoch [46/80], Step [300/500] Loss: 0.1500
Epoch [46/80], Step [400/500] Loss: 0.1471
Epoch [46/80], Step [500/500] Loss: 0.1577
Epoch [47/80], Step [100/500] Loss: 0.1232
Epoch [47/80], Step [200/500] Loss: 0.1485
Epoch [47/80], Step [300/500] Loss: 0.2873
Epoch [47/80], Step [400/500] Loss: 0.3067
Epoch [47/80], Step [500/500] Loss: 0.1435
Epoch [48/80], Step [100/500] Loss: 0.2490
Epoch [48/80], Step [200/500] Loss: 0.2533
Epoch [48/80], Step [300/500] Loss: 0.1119
Epoch [48/80], Step [400/500] Loss: 0.1546
Epoch [48/80], Step [500/500] Loss: 0.2637
Epoch [49/80], Step [100/500] Loss: 0.1515
Epoch [49/80], Step [200/500] Loss: 0.1934
Epoch [49/80], Step [300/500] Loss: 0.0766
Epoch [49/80], Step [400/500] Loss: 0.1556
Epoch [49/80], Step [500/500] Loss: 0.2014
Epoch [50/80], Step [100/500] Loss: 0.2393
Epoch [50/80], Step [200/500] Loss: 0.3324
Epoch [50/80], Step [300/500] Loss: 0.1303
Epoch [50/80], Step [400/500] Loss: 0.2781
Epoch [50/80], Step [500/500] Loss: 0.1666
Epoch [51/80], Step [100/500] Loss: 0.1734
Epoch [51/80], Step [200/500] Loss: 0.2402
Epoch [51/80], Step [300/500] Loss: 0.2121
Epoch [51/80], Step [400/500] Loss: 0.1578
Epoch [51/80], Step [500/500] Loss: 0.2454
Epoch [52/80], Step [100/500] Loss: 0.1594
Epoch [52/80], Step [200/500] Loss: 0.2134
Epoch [52/80], Step [300/500] Loss: 0.0919
Epoch [52/80], Step [400/500] Loss: 0.1769
Epoch [52/80], Step [500/500] Loss: 0.2247
Epoch [53/80], Step [100/500] Loss: 0.2414
Epoch [53/80], Step [200/500] Loss: 0.1700
Epoch [53/80], Step [300/500] Loss: 0.1553
Epoch [53/80], Step [400/500] Loss: 0.2141
Epoch [53/80], Step [500/500] Loss: 0.1380
Epoch [54/80], Step [100/500] Loss: 0.1040
Epoch [54/80], Step [200/500] Loss: 0.1396
Epoch [54/80], Step [300/500] Loss: 0.1406
Epoch [54/80], Step [400/500] Loss: 0.1281
Epoch [54/80], Step [500/500] Loss: 0.1767
Epoch [55/80], Step [100/500] Loss: 0.1912
Epoch [55/80], Step [200/500] Loss: 0.1481
Epoch [55/80], Step [300/500] Loss: 0.1444
Epoch [55/80], Step [400/500] Loss: 0.1703
Epoch [55/80], Step [500/500] Loss: 0.1799
Epoch [56/80], Step [100/500] Loss: 0.1166
Epoch [56/80], Step [200/500] Loss: 0.1637
Epoch [56/80], Step [300/500] Loss: 0.1259
Epoch [56/80], Step [400/500] Loss: 0.1635
Epoch [56/80], Step [500/500] Loss: 0.2844
Epoch [57/80], Step [100/500] Loss: 0.1429
Epoch [57/80], Step [200/500] Loss: 0.1619
Epoch [57/80], Step [300/500] Loss: 0.2326
Epoch [57/80], Step [400/500] Loss: 0.1635
Epoch [57/80], Step [500/500] Loss: 0.2051
Epoch [58/80], Step [100/500] Loss: 0.1408
Epoch [58/80], Step [200/500] Loss: 0.1411
Epoch [58/80], Step [300/500] Loss: 0.2641
Epoch [58/80], Step [400/500] Loss: 0.2165
Epoch [58/80], Step [500/500] Loss: 0.1642
Epoch [59/80], Step [100/500] Loss: 0.2740
Epoch [59/80], Step [200/500] Loss: 0.1128
Epoch [59/80], Step [300/500] Loss: 0.2121
Epoch [59/80], Step [400/500] Loss: 0.2078
Epoch [59/80], Step [500/500] Loss: 0.1159
Epoch [60/80], Step [100/500] Loss: 0.1053
Epoch [60/80], Step [200/500] Loss: 0.2107
Epoch [60/80], Step [300/500] Loss: 0.1609
Epoch [60/80], Step [400/500] Loss: 0.1636
Epoch [60/80], Step [500/500] Loss: 0.1829
Epoch [61/80], Step [100/500] Loss: 0.1145
Epoch [61/80], Step [200/500] Loss: 0.1602
Epoch [61/80], Step [300/500] Loss: 0.0962
Epoch [61/80], Step [400/500] Loss: 0.1498
Epoch [61/80], Step [500/500] Loss: 0.1702
Epoch [62/80], Step [100/500] Loss: 0.0975
Epoch [62/80], Step [200/500] Loss: 0.1107
Epoch [62/80], Step [300/500] Loss: 0.1446
Epoch [62/80], Step [400/500] Loss: 0.2560
Epoch [62/80], Step [500/500] Loss: 0.1480
Epoch [63/80], Step [100/500] Loss: 0.2328
Epoch [63/80], Step [200/500] Loss: 0.1314
Epoch [63/80], Step [300/500] Loss: 0.2381
Epoch [63/80], Step [400/500] Loss: 0.1002
Epoch [63/80], Step [500/500] Loss: 0.1364
Epoch [64/80], Step [100/500] Loss: 0.2337
Epoch [64/80], Step [200/500] Loss: 0.1603
Epoch [64/80], Step [300/500] Loss: 0.1622
Epoch [64/80], Step [400/500] Loss: 0.2281
Epoch [64/80], Step [500/500] Loss: 0.2363
Epoch [65/80], Step [100/500] Loss: 0.1970
Epoch [65/80], Step [200/500] Loss: 0.1200
Epoch [65/80], Step [300/500] Loss: 0.0948
Epoch [65/80], Step [400/500] Loss: 0.1586
Epoch [65/80], Step [500/500] Loss: 0.1901
Epoch [66/80], Step [100/500] Loss: 0.1846
Epoch [66/80], Step [200/500] Loss: 0.2095
Epoch [66/80], Step [300/500] Loss: 0.1828
Epoch [66/80], Step [400/500] Loss: 0.0947
Epoch [66/80], Step [500/500] Loss: 0.2168
Epoch [67/80], Step [100/500] Loss: 0.1777
Epoch [67/80], Step [200/500] Loss: 0.2234
Epoch [67/80], Step [300/500] Loss: 0.1363
Epoch [67/80], Step [400/500] Loss: 0.1051
Epoch [67/80], Step [500/500] Loss: 0.1794
Epoch [68/80], Step [100/500] Loss: 0.1194
Epoch [68/80], Step [200/500] Loss: 0.1159
Epoch [68/80], Step [300/500] Loss: 0.1734
Epoch [68/80], Step [400/500] Loss: 0.1428
Epoch [68/80], Step [500/500] Loss: 0.1188
Epoch [69/80], Step [100/500] Loss: 0.1475
Epoch [69/80], Step [200/500] Loss: 0.1046
Epoch [69/80], Step [300/500] Loss: 0.2766
Epoch [69/80], Step [400/500] Loss: 0.2422
Epoch [69/80], Step [500/500] Loss: 0.1225
Epoch [70/80], Step [100/500] Loss: 0.2478
Epoch [70/80], Step [200/500] Loss: 0.2029
Epoch [70/80], Step [300/500] Loss: 0.1470
Epoch [70/80], Step [400/500] Loss: 0.2930
Epoch [70/80], Step [500/500] Loss: 0.1295
Epoch [71/80], Step [100/500] Loss: 0.2208
Epoch [71/80], Step [200/500] Loss: 0.1250
Epoch [71/80], Step [300/500] Loss: 0.1159
Epoch [71/80], Step [400/500] Loss: 0.1022
Epoch [71/80], Step [500/500] Loss: 0.0812
Epoch [72/80], Step [100/500] Loss: 0.0846
Epoch [72/80], Step [200/500] Loss: 0.0844
Epoch [72/80], Step [300/500] Loss: 0.1620
Epoch [72/80], Step [400/500] Loss: 0.2203
Epoch [72/80], Step [500/500] Loss: 0.0930
Epoch [73/80], Step [100/500] Loss: 0.0905
Epoch [73/80], Step [200/500] Loss: 0.1385
Epoch [73/80], Step [300/500] Loss: 0.1368
Epoch [73/80], Step [400/500] Loss: 0.1394
Epoch [73/80], Step [500/500] Loss: 0.1557
Epoch [74/80], Step [100/500] Loss: 0.1351
Epoch [74/80], Step [200/500] Loss: 0.1484
Epoch [74/80], Step [300/500] Loss: 0.1033
Epoch [74/80], Step [400/500] Loss: 0.1216
Epoch [74/80], Step [500/500] Loss: 0.1550
Epoch [75/80], Step [100/500] Loss: 0.0889
Epoch [75/80], Step [200/500] Loss: 0.0894
Epoch [75/80], Step [300/500] Loss: 0.3254
Epoch [75/80], Step [400/500] Loss: 0.2428
Epoch [75/80], Step [500/500] Loss: 0.1525
Epoch [76/80], Step [100/500] Loss: 0.2483
Epoch [76/80], Step [200/500] Loss: 0.1099
Epoch [76/80], Step [300/500] Loss: 0.1486
Epoch [76/80], Step [400/500] Loss: 0.2034
Epoch [76/80], Step [500/500] Loss: 0.0944
Epoch [77/80], Step [100/500] Loss: 0.1246
Epoch [77/80], Step [200/500] Loss: 0.0717
Epoch [77/80], Step [300/500] Loss: 0.1999
Epoch [77/80], Step [400/500] Loss: 0.1432
Epoch [77/80], Step [500/500] Loss: 0.2132
Epoch [78/80], Step [100/500] Loss: 0.0835
Epoch [78/80], Step [200/500] Loss: 0.1805
Epoch [78/80], Step [300/500] Loss: 0.2742
Epoch [78/80], Step [400/500] Loss: 0.1205
Epoch [78/80], Step [500/500] Loss: 0.0664
Epoch [79/80], Step [100/500] Loss: 0.0953
Epoch [79/80], Step [200/500] Loss: 0.1801
Epoch [79/80], Step [300/500] Loss: 0.2401
Epoch [79/80], Step [400/500] Loss: 0.0929
Epoch [79/80], Step [500/500] Loss: 0.1187
Epoch [80/80], Step [100/500] Loss: 0.1222
Epoch [80/80], Step [200/500] Loss: 0.1596
Epoch [80/80], Step [300/500] Loss: 0.1393
Epoch [80/80], Step [400/500] Loss: 0.0888
Epoch [80/80], Step [500/500] Loss: 0.1377
Accuracy of the model on the test images: 87.97 %

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值