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

完整的模型验证套路

模型验证

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 nnbird_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个类别的数据集。

相关文章:

完整的模型验证套路

模型验证 0. 写在前面 经过之前的代码编写&#xff0c;我们已经建立了一套模型&#xff0c;下面就开始对我们编写的模型进行验证。 代码&#xff1a;代码链接 1. 验证模型 我们首先运行代码&#xff08;epoch 20&#xff09;得到结果如下&#xff1a; Files already down…...

python2和python3的区别

python2和python3的区别 ​核心区别​Python 2 示例​Python 3 示例​通俗解释​专业术语​1. 打印方式print "Hello"print("Hello")Python 3必须加括号&#xff0c;像“按钮操作”&#xff1b;Python 2像“直接喊话”。print从语句变为函数&#xff0c;支…...

【时时三省】(C语言基础)用printf函数输出数据3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 ( 5 ) e格式符。 用格式声明%e指定以指数形式输出实数。如果不指定输出数据所占的宽度和数字部分的小数位数&#xff0c;许多C编译系统&#xff08;如VisualC&#xff09;会自动给出数字部分…...

【差分约束】 P3275 [SCOI2011] 糖果|省选-

本文涉及知识点 差分约束 P3275 [SCOI2011] 糖果 题目描述 幼儿园里有 N N N 个小朋友&#xff0c; lxhgww \text{lxhgww} lxhgww 老师现在想要给这些小朋友们分配糖果&#xff0c;要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心&#xff0c;总是会提出一些要求&…...

找第一个只出现一次的字符(信息学奥塞一本通-1130)

【题目描述】 给定一个只包含小写字母的字符串&#xff0c;请你找到第一个仅出现一次的字符。如果没有&#xff0c;输出no。 【输入】 一个字符串&#xff0c;长度小于100000。 【输出】 输出第一个仅出现一次的字符&#xff0c;若没有则输出no。 【输入样例】 abcabd 【输出样…...

【MySQL】多表操作 —— 外键约束

目录 多表关系一对一关系一对多/多对一关系多对多关系 外键约束基本概念一对多/多对一创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多对多创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多表关系 MySQL 多表之间的关系可以概括为&#…...

自己动手打造AI Agent:基于DeepSeek-R1+websearch从零构建自己的Manus深度探索智能体AI-Research

第一章&#xff1a;AI Agent基础与DeepSeek-R1架构解析&#xff08;1/10&#xff09; 1.1 AI Agent技术演进与核心价值 人工智能代理&#xff08;AI Agent&#xff09;经历了从规则驱动到数据驱动的范式转移。早期基于专家系统的符号主义方法&#xff08;如MYCIN医疗诊断系统…...

SpringSecurity配置(校验数据库用户信息)

文末有本篇文章的项目源码文件可供下载学习 通过SpringSecurity快速入门案例我们已经实现了基于内存的校验用户信息,但在实际项目中我们需要校验从数据库中获取的用户信息,这里我们主要是两步操作: 1.需要我们实现UserDetailsService的loadUserByUsername方法,在方法中以前端…...

中考语文的考点及相应的解题技巧

1 考点分布 1.1 作文&#xff08;60 分左右&#xff09; 考点&#xff1a;立意、选材、结构、语言表达等。要求立意深刻、新颖&#xff0c;选材真实、典型&#xff0c;结构清晰、完整&#xff0c;语言流畅、生动。 解题技巧&#xff1a;认真审题&#xff0c;理解题目要求和限…...

PackageManagerService

首语 PackageManagerService(以下简称PMS)是Android最核心的系统服务之一&#xff0c;它是应用程序包管理服务&#xff0c;管理手机上所有的应用程序&#xff0c;包括应用程序的安装、卸载、更新、应用信息的查询、应用程序的禁用和启用等。 职责 在Android系统启动过程中扫…...

基于大模型的智能客服搭建

引言&#xff1a;智能客服的范式转变 在数字经济浪潮中&#xff0c;客户服务正经历从"人力密集型"向"技术驱动型"的深刻转型。据IDC最新报告&#xff0c;全球智能客服市场规模预计将在2028年突破1200亿美元&#xff0c;年复合增长率达28.6%。这种增长背后…...

Vagrant+VMWare 安装Ubuntu24.04

背景介绍 对于众多 Windows 用户来说, 有时候需要用到 Linux 环境做一些开发或者测试. WSL 目前能覆盖到很大一部分使用场景, 但是仍然有一些场景需要用虚拟机才能解决. 开发者的痛点往往是对于虚拟机环境的配置和管理, 因为手动安装需要很长的时间, 并且每次安装完成之后需要…...

数字化转型 - 数据驱动

数字化转型 一、 数据驱动1.1 监控1.2 分析1.3 挖掘1.4 赋能 二、数据驱动案例2.1 能源工业互联网&#xff1a;绿色节能的数字化路径2.2 光伏产业的数字化升级2.3 数据中心的绿色转型2.4云迁移的质效优化2.5 企业数字化运营的实践2.6数字化转型的最佳实践 一、 数据驱动 从数…...

【软考-架构】11.3、设计模式-新

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 项目中的应用设计模式创建型设计模式结构型设计模式行为型设计模式 &#x1f4af;考试真题题外话 项目中的应用 在实际项目中&#xff0c;我应用过多种设计模式来解决不同…...

leetcode0031 下一个排列-medium

1 题目&#xff1a; 下一个排列 官方标定难度&#xff1a;中等 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一…...

CmBacktrace的cmb_cfg.h

一&#xff1a;宏定义解析 #ifndef _CMB_CFG_H_ #define _CMB_CFG_H_#ifdef CMB_USER_CFG #include "cmb_user_cfg.h" #else /* print line, must config by user */ #define cmb_println(...) /* e.g., printf(__VA_ARGS__);printf("\r\n"…...

Redis监控:从睁眼瞎到千里眼的进化史

各位在Redis迷雾中摸黑的探险家们&#xff01;今天我们要给Redis装上"天眼系统"——从连自己内存爆了都不知道的睁眼瞎&#xff0c;进化到连每秒哪个键被摸了几次都门儿清的监控狂魔&#xff01;准备好迎接《Redisの楚门世界》了吗&#xff1f;&#x1f441;️ 第一幕…...

mac利用“自动操作”扩展添加 Mac 访达右键菜单项

用惯了 Windows 的资源管理器&#xff0c;换到 Mac 的访达&#xff0c;最不习惯的就是不能通过右键菜单创建文件。 虽然 Mac 的 App Store 中有几个可以增加访达右键菜单的工具&#xff0c;但是居然都要收费&#xff08;就这么一点点活都能卖钱&#xff0c;真是了不起&#xf…...

算法013——水果成篮

水果成篮&#xff08;点击即可跳转&#xff09; 这道题其实就是找到一个最长的子数组的长度&#xff0c;子数组中不超过两种类型的水果。 定义两个指针 left 与 right &#xff0c;固定 left , 当 right 走到一个位置时&#xff0c;left 与 right 之间的种类 kind 2 , 当 ri…...

TCP/IP协议栈----通俗易懂(与OSI七层模型区别)

目录 一、概念 二、模型 对比 ​编辑​&#xff08;1&#xff09;OSI的七层模型 &#xff08;2&#xff09;TCP/IP的四层模型 三、TCP/IP模型分层 &#xff08;1&#xff09;应用层 &#xff08;2&#xff09;传输层 &#xff08;3&#xff09;网络层 &#xff08;4&…...

python中print函数的flush如何使用

在 Python 中&#xff0c;print 函数的 flush 参数是一个布尔值&#xff0c;默认值为 False。当设置为 True 时&#xff0c;它会强制将输出缓冲区的内容立即刷新到目标设备&#xff08;通常是控制台&#xff09;&#xff0c;而不是等待缓冲区满或者程序结束时才输出。 要注意fl…...

python中有几种作用域

在 Python 中&#xff0c;作用域决定了变量的可见性和生命周期。Python 主要有以下四种作用域&#xff1a; 1. 局部作用域&#xff08;Local Scope&#xff09;&#xff1a; - 在函数或方法内部定义的变量属于局部作用域。 - 这些变量只能在函数或方法内部访问。 def my_f…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固定表头表格

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_13可展开行的固…...

【Java 优选算法】分治 - 快速排序

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 分治算法就是将一个问题划分为多个相同类型的子问题,解决这些子问题即解决该类问题 颜色分类 题目链接 解法 利用三指针, i, left, right,将数组分为4个区间,如下图 …...

Kafka相关的面试题

以下是150道Kafka相关的面试题及简洁回答&#xff1a; Kafka基础概念 1. 什么是Kafka&#xff1f; Kafka是一个分布式、可扩展、容错的发布-订阅消息系统&#xff0c;最初由LinkedIn开发&#xff0c;现为Apache项目。它适用于高吞吐量的场景&#xff0c;如大数据处理和实时数据…...

Java基础面经

Java 基础 面试官&#xff1a;重写与重载的区别&#xff1f; 重载&#xff1a;发生在同一个类中&#xff0c;若多个方法之间方法名相同、参数列表不同&#xff0c;则它们构成重载的关系。重载与方法的返回值以及访问修饰符无关&#xff0c;即重载的方法不能根据返回类型进行…...

Let’s Build AI- 实用AI导航网站

Let’s Build AI Let’s Build AI是一个在线实用AI导航网站&#xff0c;由社区驱动的平台&#xff0c;致力于为 AI 爱好者和开发人员共享资源、工具和知识等等&#xff0c;通过GitHub编辑内容更新&#xff0c;目前包括数据库、模型、开发者工具、ChatGPT提示、图像生成、模型开…...

Spring Boot集成EasyExcel

1. 初始化Spring Boot项目 首先&#xff0c;使用Spring Initializr&#xff08;https://start.spring.io/&#xff09;生成一个基本的Spring Boot项目。选择以下依赖项&#xff1a; Spring WebLombok (用于减少样板代码)SLF4J (用于日志记录) 2. 添加依赖 在你的pom.xml文件…...

2024年12月CCF-GESP编程能力等级认证C++编程六级真题解析

CCF-GESP C++六级真题难度与考察范围深度解析 考试定位与整体难度 CCF-GESP C++六级认证属于高阶编程能力考核,难度显著高于五级,接近信息学竞赛提高组水平,重点考察复杂算法设计、面向对象编程(OOP)深度应用及高级数据结构实现能力。试题要求考生具备将数学建模与算法优化…...

网络VLAN技术详解:原理、类型与实战配置

网络VLAN技术详解&#xff1a;原理、类型与实战配置 1. 什么是VLAN&#xff1f; VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09; 是一种通过逻辑划分而非物理连接隔离网络设备的技术。它允许管理员将同一物理网络中的设备划分为多个独立的广播…...

深入探讨RAID 5的性能与容错能力:实验与分析(磁盘阵列)

前言—— 本实验旨在探讨 RAID 5 的性能和容错能力。通过创建 RAID 5 阵列并进行一系列读写性能测试及故障模拟&#xff0c;我们将观察 RAID 5 在数据冗余和故障恢复方面的表现&#xff0c;以验证其在实际应用中的可靠性和效率。 首先说明&#xff1a;最少三块硬盘, 使用 4 块…...

如何让ai问答机器人通人性?

领域专用的问答机器人&#xff0c;数据是灵魂。通用模型的问题在于&#xff0c;它们虽然知识广博&#xff0c;但对特定领域的深度理解不足。解决这个问题的第一步&#xff0c;就是构建一个高质量的领域知识库。 数据要精准且全面 想让机器人真正“懂”一个领域&#xff0c;数…...

最新版Chrome浏览器加载ActiveX控件技术--allWebPlugin中间件一键部署浏览器扩展

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…...

重生之我在学Vue--第11天 Vue 3 高级特性

重生之我在学Vue–第11天 Vue 3 高级特性 文章目录 重生之我在学Vue--第11天 Vue 3 高级特性前言一、Teleport&#xff1a;打破组件层级的瞬移术1. 什么是Teleport&#xff1f;2. 核心用法3. 实战技巧 二、Suspense&#xff1a;异步组件的优雅过渡1. 为什么需要Suspense&#x…...

汽车无钥匙启动系统不使用传统机械钥匙启动汽车

汽车无钥匙启动系统 定义 汽车无钥匙启动系统&#xff08;Keyless Start System&#xff09;&#xff0c;启动车辆时不用掏拧钥匙&#xff0c;只需把钥匙放在包内或口袋里&#xff0c;按下车内按键或拧动导板即可使发动机点火。它无需插入钥匙&#xff0c;通过点按按键或旋转…...

平安养老险深圳分公司积极开展2025年“3·15”金融消费者权益保护教育宣传活动

为深刻把握金融工作的政治性、人民性&#xff0c;帮助社会公众增强维护自身合法权益的意识和能力&#xff0c;平安养老险深圳分公司在2025年3月7日至3月15日期间&#xff0c;以“保障金融权益&#xff0c;助力美好生活”为口号&#xff0c;聚焦“维护权益”主题&#xff0c;全面…...

python 实现 A* 算法

A*算法是一种广泛使用的路径搜索算法&#xff0c;结合了启发式搜索和Dijkstra算法的优点。它通过评估每个节点的代价函数 ( f(n) g(n) h(n) ) 来选择最优路径&#xff0c;其中&#xff1a; ( g(n) ) 是从起点到当前节点的实际代价。( h(n) ) 是从当前节点到目标节点的启发式…...

MyBatis 如何创建 SqlSession 对象的?

MyBatis 创建 SqlSession 对象的过程主要由 SqlSessionFactory 接口及其实现类来完成。以下是详细步骤&#xff1a; 1. SqlSessionFactory 接口: SqlSessionFactory 是 MyBatis 的核心接口之一&#xff0c;它负责创建 SqlSession 对象。 你可以将 SqlSessionFactory 视为 Sql…...

微服务》》四个问题

客户端如何访问 API 网关 如 Core中 Ocelot技术 服务如何治理 服务注册与发现 如 Core中 的 consul技术 服务挂了怎么办 可以利用 重试机制、限流、熔断、降级等 服务之间通信问题 》》同步 1. Http 对外 跨防火墙 【 序列化、反序列化 2 &#xff08; 因为http是应用层…...

CockroachDB MCP -cursor适用

CockroachDB MCP 服务器 GitHub仓库置顶 这是一个用于 Cursor 的 CockroachDB MCP 服务器&#xff0c;基于 Model Context Protocol (MCP) 规范实现&#xff0c;可以让你在 Cursor 中直接与 CockroachDB 数据库交互。 功能 连接到 CockroachDB 数据库获取数据库中的所有表获…...

GOC学习

for(int i1;i<5;i){//这里的所有语句都会被执行 5 次 } int main(){pen.a(200,16,1,0).a(200,-16,1,0);pen.rt(16).fd(200).bk(200);pen.lt(32).fd(200).bk(200);///pen.rt(-32).fd(200).bk(200);for(int i1;i<5;i){pen.a(200,16,1,0).a(200,-16,1,0);pen.rt(16).fd(200)…...

【机器学习】基于t-SNE的MNIST数据集可视化探索

一、前言 在机器学习和数据科学领域&#xff0c;高维数据的可视化是一个极具挑战但又至关重要的问题。高维数据难以直观地理解和分析&#xff0c;而有效的可视化方法能够帮助我们发现数据中的潜在结构、模式和关系。本文以经典的MNIST手写数字数据集为例&#xff0c;探讨如何利…...

Vscode工具开发Vue+ts项目时vue文件ts语法报错-红波浪线等

Vscode工具开发Vuets项目时vue文件ts语法报错-红波浪线等 解决方案 问题如题描述&#xff0c;主要原因是开发工具使用的代码检查与项目的中的ts不一致导导致&#xff0c;解决办法&#xff0c;修改 vscode 中&#xff0c; 快捷键&#xff1a;command shift p, 输入&#xff…...

Python在数据处理中的应用:从入门到精通

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…...

vue3实现跨页面缓存

避免频繁向后端发送请求,vue3中,可以用缓存机制,为了实现跨页面缓存,可以把缓存放到localsotrage里面 关键代码: const globalCache JSON.parse(localStorage.getItem(globalCache)) || {}; 然后加一个forceRefresh关键字, const fetchData async (forceRefresh false) …...

YOLO优化之多信息融合MIF

设计背景 在目标检测领域,随着深度学习技术的不断进步,研究者们一直在寻求提高模型性能和效率的方法。其中, 多模态数据融合 作为一种有效的策略,近年来受到了广泛关注。多模态融合旨在将来自不同传感器或模态的数据进行整合,以提供更全面、丰富的信息供模型学习和推断。…...

人工智能与人的智能,改变一生的思维模型【8】逆向思维

逆向偏差思维模型&#xff1a;顶尖高手如何「反常识」破局 &#xff08;斯坦福决策科学中心认证的逆向思考框架&#xff09; 一、直击本质&#xff1a;什么是逆向偏差思维&#xff1f; 定义&#xff1a; 逆向偏差思维是一种主动对抗本能认知倾向的决策模式&#xff0c;通过系…...

Python 科学计算与机器学习入门:NumPy + Scikit-Learn 实战指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

深入理解 Qt 系统托盘图标:创建自定义的系统托盘图标类

文章目录 深入理解 Qt 系统托盘图标&#xff1a;创建自定义的系统托盘图标类1. 什么是 QSystemTrayIcon&#xff1f;2. 自定义系统托盘图标类&#xff1a;SysTraylcon3. 代码解析1. **类的定义**2. **构造函数&#xff1a;SysTraylcon::SysTraylcon(QWidget *parent)**3. **ini…...

DeepSeek-R1 面试 -—— GRPO

DeepSeek训练中应用的GRPO算法&#xff0c;它源自于强化学习领域的PPO算法。GRPO与PPO算法之间存在哪些差异&#xff1f;这两种算法各自的优劣何在&#xff1f;为何DeepSeek选择采用GRPO算法而非PPO算法&#xff1f;本文将对这些问题提供解答。 一、PPO算法 PPO&#xff08;Pr…...