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的更多相关文章
随机推荐
- Manacher算法 & Palindrome
马拉车用于解决最长回文子串问题,重点是子串,而不是子序列,时间复杂度为O(n). 解释一下变量的意义: Len[i]数组去存第i个位置到mx位置的长度 id记录上一次操作的位置(这个操作可以看模板) ...
- Caocao's Bridges HDU - 4738 找桥
题意: 曹操在赤壁之战中被诸葛亮和周瑜打败.但他不会放弃.曹操的军队还是不擅长打水仗,所以他想出了另一个主意.他在长江上建造了许多岛屿,在这些岛屿的基础上,曹操的军队可以轻易地攻击周瑜的军队.曹操还修 ...
- Playbook 角色(Roles) 和 Include 语句
简介 当我们刚开始学习运用 playbook 时,可能会把 playbook 写成一个很大的文件,到后来可能你会希望这些文件是可以方便去重用的,所以需要重新去组织这些文件. Include 语句 基本 ...
- 使用DTK创建模糊背景窗口并自定义阴影效果
DTK是deepin开发的基于Qt的开发套件,提供了大量的具有独特风格的美化控件,也提供了很多非常方便的API,下边我们用DTK实现一个模糊窗口,并设置其阴影效果. 使用场景 一切需要模糊窗口作为美化 ...
- 按层次顺序创建二叉树;判断BST
https://github.com/TouwaErioH/subjects/tree/master/C%2B%2B/PA2 BST 假设已经给定树节点的结构不可修改. 然后输入是按照层次顺序 怎样创 ...
- 图解算法——恢复一棵二叉搜索树(BST)
题目来源 基础:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换.请在不改变其结构的情况下,恢复这棵树. 进阶:使用 O(n) 空间复杂度的解法很容易实现.你能想出一个只使用常数空间的 ...
- C# 类 (12) - Partial
Partial 前面说了,同一个namespace 里 class 名字是不能重的,除非是在不同的namespace里,下面开始打脸在同一个namespace里,加上partial 关键字,可以写同样 ...
- Commons Collections2分析
0x01.POC分析 //创建一个CtClass对象的容器 ClassPool classPool=ClassPool.getDefault(); //添加AbstractTranslet的搜索路径 ...
- Google Chrome 怎么在退出时自动删除历史记录
1 Google Chrome 怎么在退出时自动删除历史记录 https://chrome.google.com/webstore/detail/clickclean/ghgabhipcejejjmh ...
- CSS will-change All In One
CSS will-change All In One CSS animation effect live demo https://nextjs.org/conf/ https://nextjs.or ...