01_AlexNet
torch.topk
功能:找出前k大的数据,及其索引号
- input:张量
- k:决定选取k个值,k=1是为top-1
- dim:索引维度
返回: - Tensor:前k大的值
- LongTensor:前k大的值所在的位置
torch.topk(input, k, dim=None,largest=True,sorted=True,out=None )
torchvision.utils.make_grid
功能:制作网格图像
- tensor:图像数据,BCHW形式
- nrow:行数(列数自动计算)
- padding:图像间距(像素单位)
- normalize:是否将像素值标准化
- range:标准化范围
- scale_each:是否单张图维度标准化
- pad_value:padding的像素值
make_grid(tensor, nrow=8, padding=2, normalize=False,range=None,scale_each=False, pad_value=0)
代码结构
- 加载图片
- 加载模型
- 模型推理
- 获取类别 topk -> index -> names
- 分类结果可视化
注意事项
- 模型接收4d张量
- 弃用LRN(LRN用处不大)
- 增加了一个trick增加AdaptiveAvgPool2d,使图片无论多大分辨率,到达该层输出都是6*6,后面接的FC层,即将不匹配的Tensor都池化为6*6的,接入fc层进行classifier。
- 卷积核数量有所改变(pytorch中没有完全按照paper中去设置)
采用norm_mean=[0.485,0.456,0.406]
norm_std=[0.229,0.224,0.225]
这两个是通过Image数据集统计的均值和标准差,但是后面用BatchNormalization就可以不用这个。
transforms.ToTensor()区间是[0,1]
img_tensor.unsqueeze_(0) #chw->bchw
with torch.no_grad():
默认情况下会记录grad,如果只是test情况下不需要做反向传播,就可以用torch.no_grad()只做前向传播省时间。
log_interval,多少个epoch打印信息
val_interval,多少个epoch执行验证集
lr_decay_step=1,学习率多少个epoch改变
transforms.Resize((256))只是短边截为256,长边成比例缩短。
transforms.Resize((256,256))是正方形
# ============================ step 4/5 优化器 ============================
# 冻结卷积层
flag = 0
# flag = 1
if flag:
fc_params_id = list(map(id, alexnet_model.classifier.parameters())) # 返回的是parameters的 内存地址
base_params = filter(lambda p: id(p) not in fc_params_id, alexnet_model.parameters())
optimizer = optim.SGD([
{'params': base_params, 'lr': LR * 0.1}, # 0 设置为0即冻结卷积层
{'params': alexnet_model.classifier.parameters(), 'lr': LR}], momentum=0.9)
bs, ncrops, c, h, w = inputs.size() # [4, 10, 3, 224, 224
outputs = alexnet_model(inputs.view(-1, c, h, w))
outputs_avg = outputs.view(bs, ncrops, -1).mean(1)
ncrops是分割多出的10张图,然后对10张图结果取平均。
流程就是对4batch的每个10张图的图片进行调整,先将4*10,3,224,224输入model中,对结果进行分割出来,得到4batch的结果。
01_AlexNet的更多相关文章
随机推荐
- java——类、对象、private、this关键字
一.定义 二.类的使用 实例:定义的类要在一个class文件内,实例化类的对象要在另一个文件内 类文件: 实例文件: 对象内存图: 先主函数入栈,之后新开一个对象存入堆内存中,之后调用的call方法 ...
- JavaScript——内置对象
- 2020ICPC·小米 网络选拔赛第一场
2020ICPC·小米 网络选拔赛第一场 C-Smart Browser #include <string> #include <iostream> std::string s ...
- 流媒体传输协议之 RTP (上篇)
本系列文章将整理各个流媒体传输协议,包括 RTP/RTCP,RTMP,希望通过深入梳理协议的设计细节,能够给流媒体领域的开发者带来一定的启发. 作者:逸殊 审核:泰一 介绍 RTP,即 real-ti ...
- KVM Pass-through 上部署 MiniSMB HurricaneII
KVM Pass-through 上部署 MiniSMB HurricaneII 免费网络测试,是一款专门用于测试无线控制器, 智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具 ...
- VXLAN学习之路-结合VRF在Linux中实践VXLAN网络
一.概述 近期在在搞网络安全HCIE.CISP的认证的事,顺便将VXLAN技术再次系统的学习一下,学习过程中看到云原生实验室里的一篇文章,就是关于VXLAN在Linux系统中的实践,感觉文章写得很好, ...
- 重学c#————struct
前言 简单整理一下struct. 正文 struct 对于struct 而言呢,我们往往会拿class作为对比,但是呢,我们在初学阶段用class来替代struct,struct的存在感越来越低了. ...
- Taro 3.x in Action
Taro 3.x in Action React, 小程序 https://taro-docs.jd.com/taro/docs/README Taro Next 跨端, 跨框架 Taro 是一个开放 ...
- vue stop event bug
vue stop event bug [Vue warn]: Error in v-on handler: "TypeError: e.prevntDefault is not a func ...
- Google & Chrome console & text adventure game
Google & Chrome console & text adventure game Google's text adventure game https://www.googl ...