当前位置: 首页 > article >正文

完整的模型验证套路

模型验证

0. 写在前面

经过之前的代码编写,我们已经建立了一套模型,下面就开始对我们编写的模型进行验证。
代码:代码链接

1. 验证模型

我们首先运行代码(epoch = 20)得到结果如下:

Files already downloaded and verified
Files already downloaded and verified
训练数据集的长度为:50000
测试数据集的长度为:10000
--------1 轮训练开始---------
0.676771879196167
训练次数:100,Loss:2.2877509593963623
1.1634891033172607
训练次数:200,Loss:2.2836055755615234
1.6435232162475586
训练次数:300,Loss:2.259389877319336
2.128425121307373
训练次数:400,Loss:2.196244478225708
2.5909883975982666
训练次数:500,Loss:2.054800033569336
3.0920963287353516
训练次数:600,Loss:2.0496277809143066
3.583195924758911
训练次数:700,Loss:2.01293683052063
整体测试集上的Loss:311.06754219532013
整体测试集上的正确率:0.28139999508857727
模型已保存
--------2 轮训练开始---------
4.807004451751709
训练次数:800,Loss:1.8768452405929565
5.280813932418823
训练次数:900,Loss:1.80678129196167
5.771225929260254
训练次数:1000,Loss:1.8711206912994385
6.2699244022369385
训练次数:1100,Loss:1.9759812355041504
6.751449108123779
训练次数:1200,Loss:1.6766831874847412
7.268543720245361
训练次数:1300,Loss:1.614893913269043
7.763317346572876
训练次数:1400,Loss:1.7297457456588745
8.251177549362183
训练次数:1500,Loss:1.77010977268219
整体测试集上的Loss:310.3170040845871
整体测试集上的正确率:0.29739999771118164
模型已保存
--------3 轮训练开始---------
9.52597451210022
训练次数:1600,Loss:1.7216854095458984
10.017236471176147
训练次数:1700,Loss:1.6383498907089233
10.56763243675232
训练次数:1800,Loss:1.9502828121185303
11.057390451431274
训练次数:1900,Loss:1.7022478580474854
11.556422233581543
训练次数:2000,Loss:1.9547746181488037
12.05769944190979
训练次数:2100,Loss:1.5276890993118286
12.54910659790039
训练次数:2200,Loss:1.4525258541107178
13.021177053451538
训练次数:2300,Loss:1.7730646133422852
整体测试集上的Loss:273.53541362285614
整体测试集上的正确率:0.36739999055862427
模型已保存
--------4 轮训练开始---------
14.276871681213379
训练次数:2400,Loss:1.7143539190292358
14.76751184463501
训练次数:2500,Loss:1.3491281270980835
15.258487462997437
训练次数:2600,Loss:1.5424039363861084
15.757968425750732
训练次数:2700,Loss:1.703037142753601
16.252521276474
训练次数:2800,Loss:1.4895200729370117
16.74870729446411
训练次数:2900,Loss:1.5755672454833984
17.24972677230835
训练次数:3000,Loss:1.350603699684143
17.74156093597412
训练次数:3100,Loss:1.502689003944397
整体测试集上的Loss:268.5869609117508
整体测试集上的正确率:0.38580000400543213
模型已保存
--------5 轮训练开始---------
19.01675248146057
训练次数:3200,Loss:1.3498046398162842
19.49561071395874
训练次数:3300,Loss:1.470048427581787
19.964598178863525
训练次数:3400,Loss:1.4789061546325684
20.425050020217896
训练次数:3500,Loss:1.5444505214691162
20.88158416748047
训练次数:3600,Loss:1.579601764678955
21.33491539955139
训练次数:3700,Loss:1.3612384796142578
21.7859046459198
训练次数:3800,Loss:1.3003607988357544
22.234445095062256
训练次数:3900,Loss:1.4430314302444458
整体测试集上的Loss:256.6889582872391
整体测试集上的正确率:0.41040000319480896
模型已保存
--------6 轮训练开始---------
23.459219694137573
训练次数:4000,Loss:1.3905110359191895
23.92496681213379
训练次数:4100,Loss:1.4269659519195557
24.480996131896973
训练次数:4200,Loss:1.5121569633483887
25.04074740409851
训练次数:4300,Loss:1.2235107421875
25.51155924797058
训练次数:4400,Loss:1.1448707580566406
25.9755756855011
训练次数:4500,Loss:1.3847157955169678
26.432241201400757
训练次数:4600,Loss:1.3717453479766846
整体测试集上的Loss:240.08570885658264
整体测试集上的正确率:0.44699999690055847
模型已保存
--------7 轮训练开始---------
28.73452091217041
训练次数:4700,Loss:1.297055959701538
29.95326828956604
训练次数:4800,Loss:1.5182180404663086
31.13327193260193
训练次数:4900,Loss:1.3600231409072876
32.3437614440918
训练次数:5000,Loss:1.4159772396087646
33.5237181186676
训练次数:5100,Loss:0.9851790070533752
34.66347408294678
训练次数:5200,Loss:1.326415777206421
35.883594274520874
训练次数:5300,Loss:1.1831620931625366
37.063539028167725
训练次数:5400,Loss:1.3785104751586914
整体测试集上的Loss:228.30031764507294
整体测试集上的正确率:0.4777999818325043
模型已保存
--------8 轮训练开始---------
39.960145711898804
训练次数:5500,Loss:1.133231282234192
40.441195249557495
训练次数:5600,Loss:1.1670846939086914
40.905672788619995
训练次数:5700,Loss:1.1962083578109741
41.385894775390625
训练次数:5800,Loss:1.2266833782196045
41.856457233428955
训练次数:5900,Loss:1.3693549633026123
42.321500062942505
训练次数:6000,Loss:1.5518251657485962
42.778517723083496
训练次数:6100,Loss:1.0891830921173096
43.23062801361084
训练次数:6200,Loss:1.1224524974822998
整体测试集上的Loss:218.00719785690308
整体测试集上的正确率:0.5062000155448914
模型已保存
--------9 轮训练开始---------
44.451961278915405
训练次数:6300,Loss:1.413287878036499
44.9254310131073
训练次数:6400,Loss:1.106429100036621
45.38542699813843
训练次数:6500,Loss:1.5343183279037476
45.843034505844116
训练次数:6600,Loss:1.1272335052490234
46.29827880859375
训练次数:6700,Loss:1.0009833574295044
46.75755429267883
训练次数:6800,Loss:1.2084541320800781
47.21127223968506
训练次数:6900,Loss:1.0678367614746094
47.66149067878723
训练次数:7000,Loss:0.9271931648254395
整体测试集上的Loss:207.2488921880722
整体测试集上的正确率:0.5324000120162964
模型已保存
--------10 轮训练开始---------
48.89197015762329
训练次数:7100,Loss:1.2234324216842651
49.362353801727295
训练次数:7200,Loss:0.9317885637283325
49.874627113342285
训练次数:7300,Loss:1.1225306987762451
50.393303632736206
训练次数:7400,Loss:0.868495762348175
50.911311864852905
训练次数:7500,Loss:1.166616678237915
51.425787687301636
训练次数:7600,Loss:1.2403347492218018
51.93840527534485
训练次数:7700,Loss:0.8848196268081665
52.46346688270569
训练次数:7800,Loss:1.1832606792449951
整体测试集上的Loss:197.49324649572372
整体测试集上的正确率:0.5557000041007996
模型已保存
--------11 轮训练开始---------
53.74972367286682
训练次数:7900,Loss:1.3868833780288696
54.27491307258606
训练次数:8000,Loss:1.1592711210250854
54.79761624336243
训练次数:8100,Loss:0.9465566277503967
55.314566135406494
训练次数:8200,Loss:1.2987215518951416
55.833564043045044
训练次数:8300,Loss:1.2284406423568726
56.35165739059448
训练次数:8400,Loss:1.0459134578704834
56.87335014343262
训练次数:8500,Loss:1.212208867073059
57.40146088600159
训练次数:8600,Loss:0.8896360993385315
整体测试集上的Loss:189.29526817798615
整体测试集上的正确率:0.5744999647140503
模型已保存
--------12 轮训练开始---------
58.69087481498718
训练次数:8700,Loss:1.1810518503189087
59.205790519714355
训练次数:8800,Loss:1.3528430461883545
59.721017360687256
训练次数:8900,Loss:1.0415140390396118
60.24348425865173
训练次数:9000,Loss:1.1264153718948364
60.76188325881958
训练次数:9100,Loss:1.0815410614013672
61.28547120094299
训练次数:9200,Loss:1.06496262550354
61.808669567108154
训练次数:9300,Loss:1.041014552116394
整体测试集上的Loss:183.87617510557175
整体测试集上的正确率:0.5874999761581421
模型已保存
--------13 轮训练开始---------
63.08698582649231
训练次数:9400,Loss:0.9140312075614929
63.60349774360657
训练次数:9500,Loss:1.3013256788253784
64.11925101280212
训练次数:9600,Loss:1.1182546615600586
64.64259076118469
训练次数:9700,Loss:1.1298035383224487
65.16450428962708
训练次数:9800,Loss:0.9201322197914124
65.68734097480774
训练次数:9900,Loss:0.9833212494850159
66.21343445777893
训练次数:10000,Loss:0.9499586820602417
66.73448371887207
训练次数:10100,Loss:0.9260061979293823
整体测试集上的Loss:179.47944033145905
整体测试集上的正确率:0.5949000120162964
模型已保存
--------14 轮训练开始---------
68.02185797691345
训练次数:10200,Loss:0.771553099155426
68.5486330986023
训练次数:10300,Loss:0.982098400592804
69.06920075416565
训练次数:10400,Loss:1.2201895713806152
69.57998514175415
训练次数:10500,Loss:0.8317960500717163
70.09068322181702
训练次数:10600,Loss:0.9644572138786316
70.61184978485107
训练次数:10700,Loss:0.7300088405609131
71.13229179382324
训练次数:10800,Loss:0.8345588445663452
71.65573596954346
训练次数:10900,Loss:0.9473534822463989
整体测试集上的Loss:176.5992021560669
整体测试集上的正确率:0.6025999784469604
模型已保存
--------15 轮训练开始---------
72.93348097801208
训练次数:11000,Loss:1.0459448099136353
73.45469641685486
训练次数:11100,Loss:0.8285507559776306
73.97483491897583
训练次数:11200,Loss:0.9871537685394287
74.50166487693787
训练次数:11300,Loss:1.1865047216415405
75.02131128311157
训练次数:11400,Loss:0.7912794947624207
75.5232424736023
训练次数:11500,Loss:1.0612103939056396
76.02270293235779
训练次数:11600,Loss:0.9121711254119873
76.54333710670471
训练次数:11700,Loss:0.924742579460144
整体测试集上的Loss:174.76049596071243
整体测试集上的正确率:0.6101999878883362
模型已保存
--------16 轮训练开始---------
77.80874443054199
训练次数:11800,Loss:0.876340389251709
78.31128787994385
训练次数:11900,Loss:0.9134108424186707
78.81778168678284
训练次数:12000,Loss:0.7884343266487122
79.32022094726562
训练次数:12100,Loss:0.8944261074066162
79.8198983669281
训练次数:12200,Loss:1.0098910331726074
80.31053805351257
训练次数:12300,Loss:0.8265034556388855
80.80550336837769
训练次数:12400,Loss:0.8845018744468689
81.3090832233429
训练次数:12500,Loss:0.7182144522666931
整体测试集上的Loss:173.52751284837723
整体测试集上的正确率:0.613599956035614
模型已保存
--------17 轮训练开始---------
82.56805276870728
训练次数:12600,Loss:0.7940953373908997
83.07455730438232
训练次数:12700,Loss:0.9394930601119995
83.59466314315796
训练次数:12800,Loss:0.8236591219902039
84.0954122543335
训练次数:12900,Loss:1.1543217897415161
84.60249090194702
训练次数:13000,Loss:0.9597013592720032
85.10201334953308
训练次数:13100,Loss:0.6400822401046753
85.59457635879517
训练次数:13200,Loss:0.7643208503723145
整体测试集上的Loss:172.6022463440895
整体测试集上的正确率:0.6187999844551086
模型已保存
--------18 轮训练开始---------
86.85463333129883
训练次数:13300,Loss:1.0511841773986816
87.3558201789856
训练次数:13400,Loss:0.7395506501197815
87.85281109809875
训练次数:13500,Loss:0.8224184513092041
88.34715843200684
训练次数:13600,Loss:1.2393466234207153
88.84439992904663
训练次数:13700,Loss:0.7472116351127625
89.33982467651367
训练次数:13800,Loss:1.048264980316162
89.83569383621216
训练次数:13900,Loss:0.6826251745223999
90.33329033851624
训练次数:14000,Loss:0.8029583096504211
整体测试集上的Loss:172.67181581258774
整体测试集上的正确率:0.6193999648094177
模型已保存
--------19 轮训练开始---------
91.59085273742676
训练次数:14100,Loss:0.9064668416976929
92.09336543083191
训练次数:14200,Loss:0.8104516863822937
92.60024118423462
训练次数:14300,Loss:0.8516992926597595
93.10346913337708
训练次数:14400,Loss:1.0159380435943604
93.60060906410217
训练次数:14500,Loss:0.9679864048957825
94.09510731697083
训练次数:14600,Loss:1.0703197717666626
94.58903241157532
训练次数:14700,Loss:0.7427949905395508
95.09209990501404
训练次数:14800,Loss:1.192516565322876
整体测试集上的Loss:171.93655902147293
整体测试集上的正确率:0.6236000061035156
模型已保存
--------20 轮训练开始---------
96.3385636806488
训练次数:14900,Loss:0.5512572526931763
96.84089422225952
训练次数:15000,Loss:0.8611812591552734
97.33078861236572
训练次数:15100,Loss:0.7399459481239319
97.82964825630188
训练次数:15200,Loss:0.9779644012451172
98.32890009880066
训练次数:15300,Loss:0.6653265953063965
98.82448101043701
训练次数:15400,Loss:0.8124582171440125
99.31558656692505
训练次数:15500,Loss:0.9203401803970337
99.82490992546082
训练次数:15600,Loss:0.8200170397758484
整体测试集上的Loss:170.70625245571136
整体测试集上的正确率:0.6290000081062317
模型已保存

进程已结束,退出代码为 0

在tensorboard上展示如下:

在训练集上的损失函数为:在这里插入图片描述
在测试集上的损失函数和准确率为:

Image 1 Image 2

同时我们将上述20次训练的模型保存了下来:在这里插入图片描述
下面我们就选用网上的图片测试我们模型的训练成果。

选用的两张照片如下(一张鸟,一张狗):

Image 1 Image 2

下图是我们数据集10分类的数字所代表的类别:
在这里插入图片描述
在这里插入图片描述

下面我们编写测试代码对训练保存的模型进行测试,我们选择james_0.pthjames_19.pth这两个训练模型进行测试:

import torch
import torchvision
from PIL import Image
from torch import nn

bird_image_path = "./image/bird.png"
dog_image_path = "./image/dog.png"

bird_image = Image.open(bird_image_path)
dog_image = Image.open(dog_image_path)

print(bird_image)
print(dog_image)

transform = torchvision.transforms.Compose([
    torchvision.transforms.Resize((32, 32)),  # 模型的输入就是32*32的
    torchvision.transforms.ToTensor()
])

bird_image = transform(bird_image)
dog_image = transform(dog_image)

print(bird_image.shape)
print(dog_image.shape)


class James(nn.Module):
    def __init__(self):
        super(James, self).__init__()
        self.model = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=32, kernel_size=5, stride=1, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(in_channels=32, out_channels=32, kernel_size=5, stride=1, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2),
            nn.MaxPool2d(kernel_size=2),
            nn.Flatten(),
            nn.Linear(in_features=64 * 4 * 4, out_features=64),
            nn.Linear(in_features=64, out_features=10)
        )

    def forward(self, x):
        x = self.model(x)
        return x


# device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

device = torch.device('cpu')
model_1 = torch.load("./all_pth/james_0.pth", map_location=device, weights_only=False)
model_20 = torch.load("./all_pth/james_19.pth", map_location=device, weights_only=False)
print(model_1)
print(model_20)

# 网络训练是需要 batchsize的,因此需要reshape一下
bird_image = torch.reshape(bird_image, (1, 3, 32, 32))
dog_image = torch.reshape(dog_image, (1, 3, 32, 32))

# 下面三行不写也没啥,但是还是建议写一下,养成良好的代码书写习惯
model_1.eval()
model_20.eval()

with torch.no_grad():
    bird_output_use_model_1 = model_1(bird_image)
    bird_output_use_model_20 = model_20(bird_image)

    dog_output_use_model_1 = model_1(dog_image)
    dog_output_use_model_20 = model_20(dog_image)

# 这种输出不利于解读,需要转换为利于解读的方式
print("bird_output_use_model_1 is {} : ".format(bird_output_use_model_1))
print(bird_output_use_model_1.argmax(1))
print("bird_output_use_model_20 is {} : ".format(bird_output_use_model_20))
print(bird_output_use_model_20.argmax(1))

print("dog_output_use_model_1 is {} : ".format(dog_output_use_model_1))
print(dog_output_use_model_1.argmax(1))
print("dog_output_use_model_20 is {} : ".format(dog_output_use_model_20))
print(dog_output_use_model_20.argmax(1))

需要注意的是:

1、我们的模型是在GPU上训练的,但是是在CPU上进行测试的,因此在代码中需要加入map_location=device才能运行通过

2、注意.PNG的图片格式和.JPG图片格式的不同:
在这里插入图片描述

运行的输出如下:

<PIL.PngImagePlugin.PngImageFile image mode=RGB size=3184x2001 at 0x207039A4F10>
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=474x535 at 0x20710877340>
torch.Size([3, 32, 32])
torch.Size([3, 32, 32])
James(
  (model): Sequential(
    (0): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (4): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (6): Flatten(start_dim=1, end_dim=-1)
    (7): Linear(in_features=1024, out_features=64, bias=True)
    (8): Linear(in_features=64, out_features=10, bias=True)
  )
)
James(
  (model): Sequential(
    (0): Conv2d(3, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (2): Conv2d(32, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (4): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (6): Flatten(start_dim=1, end_dim=-1)
    (7): Linear(in_features=1024, out_features=64, bias=True)
    (8): Linear(in_features=64, out_features=10, bias=True)
  )
)
bird_output_use_model_1 is tensor([[-2.0475,  0.0471,  0.6036,  0.4938,  0.7419,  0.5055,  1.3553,  0.9717,
         -2.2019,  0.0122]]) : 
tensor([6])
bird_output_use_model_20 is tensor([[ -0.7549,  -5.5571,   7.4145,   0.4102,   2.5212,   4.0144,   3.4109,
           4.2386, -10.3755,  -4.9776]]) : 
tensor([2])
dog_output_use_model_1 is tensor([[-0.1708,  0.0956,  0.5178,  0.5494, -0.0494,  0.4421, -0.6309,  0.2048,
         -0.9128, -0.8910]]) : 
tensor([3])
dog_output_use_model_20 is tensor([[ 1.2698, -6.7908,  3.4479,  4.3834,  1.3108,  5.4111,  0.0574, -0.2645,
         -2.8700, -6.5925]]) : 
tensor([5])

进程已结束,退出代码为 0

可以发现:

  • 对于只训练一次的模型james_0.pth 预测结果一次都没有对,说明没有学习到正确的参数,毕竟只训练了一遍,肯定是学不到啥参数权重的。
  • 对于训练了20次的模型james_19.pth ,预测结果都是对的,尽管其在测试集上的正确率只有 0.6290000081062317 0.6290000081062317 0.6290000081062317,但是大部分的图片还是可以预测对的。

读者要是有兴趣,可以将上述环境搭配好后,训练自己的模型,然后在网上找照片或者自己拍照来测试模型的泛化能力。但是需要注意的是,上述训练出来的模型只能分类10个类别,因为CIFAR10数据集只是10个类别的数据集。


http://www.kler.cn/a/588357.html

相关文章:

  • NPU的工作原理:神经网络计算的流水线
  • 计算机二级Python资料
  • RabbitMQ(补档)
  • Hive SQL 精进系列:解锁 Hive SQL 中 KeyValue 函数的强大功能
  • 微信小程序刷题逻辑实现:技术揭秘与实践分享
  • sensor数据在整个rk平台的框架流程是怎么样,
  • 业务幂等性设计的六种方案
  • 蓝桥杯[阶段总结] 二分,前缀和
  • 华为云容器引擎应用场景
  • 游戏成瘾与学习动力激发研究——多巴胺脉冲式释放与奖赏预测误差机制的神经科学解析
  • ccf3501密码
  • 计算机操作系统进程(4)
  • 【网络】什么是反向代理Reverse Proxies?
  • matlab中如何集成使用python
  • Python中在类中创建对象
  • 基于Spring Boot的航司互售系统
  • Java中队列(Queue)和列表(List)的区别
  • 基于ssm+vue汽车租赁系统
  • 量化交易学习笔记02:双均线策略
  • java项目之基于ssm的药店药品信息管理系统(源码+文档)