pytorch中的正向传播
opt.step()
opt.zero_grad()
#实际是替代了
with torch.no_grad():
for p in model.parameters(): p -= p.grad * lr
model.zero_grad()
loss.backward()#反向传播是记录各个参数变化,后续用来求导
opt.step()#利用上一步计算的梯度对内部参数进行更新计算
opt.zero_grad()#将梯度归零,便于后面再次迭代计算时不会产生累加现象
微调网络
在进行特征提取时,我们只需要更新最后一层的参数,或者换句话说,我们只需要更新正在重构的层的参数。
因此,我们不需要计算没有更改的参数的梯度,因此为了提高效率,我们将.requires_grad属性设置为False。
这一点很重要,因为默认情况下,该属性被设置为True。
然后,当我们初始化新层时,默认情况下新参数为.requires_grad=True,因此只更新新层的参数。
当我们进行微调时,可以将所有.required_grad设置为True。
空间变换网络STN(Spatial Transformer Networks)
可以使得模型具有空间不变性
神经迁移
1.
进行神经迁移之前首先加载这些包
2.原始PIL图片值在0到255,将其转化为tensor后,其值在0到1之间,torch库中的神经网络训练的tensor值在0到1之间,但是Caffe预训练的网络tensor在0~255
3.对攻击者的知识有几种假设,其中两种假设是:白盒假设和黑盒假设。
白盒攻击假定攻击者完全了解并访问模型,包括体系结构、输入、输出和权重。黑盒攻击假定攻击者只能访问模型的输入和输出,对底层架构或权重一无所知。还有几种类型的目标,包括错误分类和源/目标错误分类。错误分类的目标意味着对手只希望输出分类是错误的,而不关心新的分类是什么。源/目标误分类是指对手想要改变原本属于特定源类的图像,以便将其分类为特定目标类。
第一个也是最流行的对抗性攻击之一被称为快速梯度符号攻击(FGSM):
FGSM(Fast Gradient Sign Method)算法
特点:白盒攻击、
论文原文:Explaining and Harnessing Adversarial Examples