pytorch图像分类实战

pytorch图像分类实战

pytorch图像分类实战_第1张图片

1. 数据集展示
训练集图片和测试集图片分别存放在train和vaild文件夹中,文件夹1,2,3…表示类别。
pytorch图像分类实战_第2张图片pytorch图像分类实战_第3张图片

2. 导入包
pytorch图像分类实战_第4张图片

3. 读取数据和预处理
设置数据存储路径
在这里插入图片描述在这里插入图片描述
pytorch图像分类实战_第5张图片在这里插入图片描述
pytorch图像分类实战_第6张图片
4. 加载模型
pytorch图像分类实战_第7张图片
pytorch图像分类实战_第8张图片
param.requires_grad=False设置网络参数param迭代训练过程不更新。pytorch图像分类实战_第9张图片models.resnet18()中的参数pretrained设置为True,表示可更新resnet18模型的参数。set_paremeter_requires_grad()冻住resnet18,不能更新参数。model_ft.fc.in_features表示找到resnet18中叫做fc的网络层,并获取in_features的值。model_ft.fc=nn.Linear(num_ftrs,102)重新定义resnet18的fc层。不清楚模型结构或者名称,可以打印出来看pytorch图像分类实战_第10张图片
best.pt文件用于保存模型
params_to_update用于保存需要更新的model参数

5. 优化器设置
pytorch图像分类实战_第11张图片
使用optim提供的Adam优化器,传入需要更新的参数params_to_update和初始化的学习率lr。
scheduler是定义的学习率衰减器,通过其调用step()进行累计计数,每累计到step_size,学习率衰减为原来的gamma倍。

6.迭代训练pytorch图像分类实战_第12张图片pytorch图像分类实战_第13张图片
pytorch图像分类实战_第14张图片
pytorch图像分类实战_第15张图片
pytorch图像分类实战_第16张图片
optimizer.param_groups[0][‘lr’]从优化中获取初始化的学习率
pytorch图像分类实战_第17张图片

7. 训练之前冻住的所有层
在fc全连接层训练好之后,解冻其他层,并重新训练所有层。
pytorch图像分类实战_第18张图片
8. 加载训练好的模型pytorch图像分类实战_第19张图片
9.测试pytorch图像分类实战_第20张图片
pytorch图像分类实战_第21张图片
需要将预测的结果preds_tensor由tenser转化为numpy,gpu直接调用numpy(),cpu需调用cpu().numpy()。

10.数据展示pytorch图像分类实战_第22张图片
image*np.array((0.229,0.224,0.225))+np.array((0.485,0.456,0.406))对数据进行归一化还原。

image.transpose():

如果图片image的大小为cxhxw,image.transpose(1,2,0)表示将image的维度转为hxwxc。

Batchnorm2d:
在卷积神经网络的卷积层之后总会添加BatchNorm2d进行数据的归一化处理,这使得数据在进行Relu之前不会因为数据差异过大而导致网络性能的不稳定。

nn.Dropout(0.5):

表示剪枝神经网络枝干,避免网络过拟合,0.5表示剪枝的程度。

batch_size和epoch:

在神经网络模型训练时,比如有1000个样本,把这些样本分为10批,就是10个batch。每个批(batch)的大小为100,就是batch_size=100。
每次模型训练,更新权重时,就拿一个batch的样本来更新权重。epoch表示需要重复遍历1000个样本的次数。

参考:
1.https://blog.csdn.net/weixin_45436729/article/details/124766002
2.https://ke.gupaoedu.cn

你可能感兴趣的:(pytorch,pytorch,分类,深度学习)