pytorch如何给预训练模型添加新的层

pytorch如何给预训练模型添加新的层,第1张

在使用pytorch预训练模型的时候发现预训练模型的输出层没有激活函数,为了提高模型的训练效果需要自己添加。以ResNet50为例:

输出的模型为:

可以看到最后的输出层是没有激活函数的,因此我们需要队fc层进行修改:

网络模型的fc层就变成了

squeeze()主要用于对数据的维度进行压缩或者解压的

官方文档

注意:

输入的张量和返回的张量共用一段内存空间,改变了其中一个,其余的都会被改变

参数:

多维张量本质上就是一个变换,如果维度是 1 ,那么,1 仅仅起到扩充维度的作用,而没有其他用途,因而,在进行降维 *** 作时,为了加快计算,是可以去掉这些 1 的维度。

总结: 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。a.squeeze(N) 就是去掉a中指定的维数为一的维度。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度。

总结: 给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.unsqueeze(N) 就是在a中指定位置N加上一个维数为1的维度。

参考: https://zhuanlan.zhihu.com/p/86763381

1、torch.nn.Unfold

函数作用:

unfold 是展开的意思,在 torch 中则是只卷不积,相当于只滑窗,不进行元素相乘

参数:

kernel_size: _size_any_t, 卷积核的大小

dilation: _size_any_t=1, 卷积核元素之间的空洞个数

padding: _size_any_t=0, 填充特征四周的列数,默认为 0,则不填充

stride: _size_any_t=1,卷积核移动的步长

函数理解:

参考资料:

PYTORCH实现手动滑窗,卷积(利用UNFOLD,FOLD *** 作)

unfold 过程:

① 对于 batch 里的每个数据分别进行 unfold

② 分别在每个数据的每个通道上,使用大小为 k*k 的卷积核进行从左往右,从上向下的滑窗

③ 对于在每个通道上分别得到的第一个滑窗区域,分别进行 reshape 成行向量,然后把在所有通道上得到的行向量,进行横向拼接,得到新的行向量

④ 对于在每个通道上得到的滑窗区域都进行步骤 ③ 的 *** 作,直到所有的滑窗区域都处理完

⑤ 将步骤 ③ 和 步骤 ④ 中得到的行向量,进行纵向拼接,得到一个矩阵

⑥ 完成 unfold *** 作,将 batch 中每个数据进行 unfold 得到的矩阵进行堆放,得到输出结果

例子:

x = torch.range(1, 2*3*4*5)

print(x.shape)

batch_x = x.reshape([2, 3, 4, 5])

print(batch_x.shape)

# unfold 是展开的意思,在 torch 中则是只卷不积,相当于只滑窗,不进行元素相乘

unfold = torch.nn.Unfold(3)

res = unfold(batch_x)

print(res.shape)

结果:

torch.Size([2, 27, 6])

分析:

假设输入的 batch_x 维度为 [2, 3, 4, 5],其中 2 是批的数据量大小 B, 3 是通道数 C,4 是高度 H,5 是宽度 W 。使用的卷积核大小 K 为 3*3,移动步长 S 为 1,padding 为 0

① 在 B 的每个数据上进行 unfold

② 同时在每个通道上的最左上角开始进行滑动,对于每个通道,得到大小为 9 的滑动区域,然后进行 Reshape 成维度为 [1, 9] 的行向量。然后将在所有 3 个通道上得到的 3 个行向量,进行横向拼接,得到维度为 [1, 27] 的行向量。

③ 依次将卷积核按照从左到右,从上往下的顺序,按照步长 1 进行滑动,每个滑动的区域经过步骤 ② 中处理后都能得到一个维度为 [1, 27] 的行向量,共得到 6 个维度为 [1, 27],然后纵向堆叠成维度为 [6, 27] 的矩阵

④ 将每个数据经过 unfold 得到的维度为 [6, 27]  的矩阵进行堆叠成维度为 [2, 27, 6]  的张量


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11709458.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存