pytorch层冻结

news/2024/12/22 18:48:25/

1.基础知识

搭建网络:去除resnet18 fc层,取出剩余网络,自定义fc层

class test(nn.Module):def __init__(self, num_classes=2):super().__init__()net = models.resnet18(pretrained=True)net.fc= nn.Sequential()    # 将分类层(fc)置空self.features = netself.fc= nn.Sequential(    # 定义一个卷积网络结构nn.Linear(512*7*7, 512),nn.ReLU(True),nn.Dropout(),nn.Linear(512, 128),nn.ReLU(True),nn.Dropout(),nn.Linear(128, num_classes),)def forward(self, x):x = self.features(x)x = x.view(x.size(0), -1)x = self.fc(x)return x
net = models.resnet18
print(net)

print(net),可输出该网络结构,可通过关键词进行访问操作相应的层

nn.Sequential()+nn.包,缺点,每一层网络都是数字标识,不好识别

self.conv=torch.nn.Sequential()

self.conv.add_module("conv1",torch.nn.Conv2d(3, 32, 3, 1, 1))

等效方法:

self.dense = torch.nn.Sequential(OrderedDict([("dense1", torch.nn.Linear(32 * 3 * 3, 128)),("relu2", torch.nn.ReLU()),("dense2", torch.nn.Linear(128, 10))]))

for i,param in enumerate(test_net.parameters()):

        print(param)可输出每一层参数

for param in test_net.named_parameters():
     print(param[0])

param[0]输出每一层键

param[1]输出每一层参数值

可以使用列表存储每一层键,为下一步冻结层做准备

for name,weight in test_net.named_parameters():
     name_space.append(name)
     print(name)
 

for i, param in enumerate(test_net.parameters()):if i < 45:param.requires_grad = False

这种冻结方法只是阻止参数更新,求导以及参数计算都正常进行

方法二:采用with torch .no_grad,来限制某层,与之相关所有层均会停止传播


http://www.ppmy.cn/news/881813.html

相关文章

支付宝资金预授权(冻结、解冻、转支付、异步通知回调、撤销、授权操作查询)

应用场景&#xff1a;需要支付宝预授权功能的APP、H5和小程序服务端。编辑于2022/09/14 文章目录 前言 一、来看预授权是什么 二、写在代码之前 接入准备&#xff1a; 接入服务端 SDK&#xff1a; 三、服务端代码 1.授权冻结接口 接口部分&#xff1a; 随机流水号部分&#xff…

Tensorflow 网络冻结

0. 网络冻结概念&#xff1a; 神经网络模型中存在大量的权重&#xff0c;这些参数在模型训练的过程中通过反向传播来不断更新&#xff0c;所参数使用的是变量。 冻结网络就是将这些变量转换为常量。 Tensorflow的Checkpoint或者SavedModels格式均采用多文件的方式存储&#xf…

进程冻结和解冻的本质

在我前面的文章中已经介绍了内核中的进程冻结技术&#xff0c;进程冻结存在的意义以及它的实现架构&#xff0c;没有看过的童鞋可以点击如下链接过去浏览&#xff1a; https://blog.csdn.net/rikeyone/article/details/103182748 看过此文的人可能又会产生一些新的疑问&#x…

javascript 浅冻结、深冻结与解冻

1、javascript 浅冻结 var obj {prop: function() {},foo: bar };// 新的属性会被添加, 已存在的属性可能 // 会被修改或移除 obj.foo baz; obj.lumpy woof; delete obj.prop;// 作为参数传递的对象与返回的对象都被冻结 // 所以不必保存返回的对象&#xff08;因为两个对象…

Pytorch的冻结以及解冻

加载部分预训练模型 其实大多数时候我们需要根据我们的任务调节我们的模型&#xff0c;所以很难保证模型和公开的模型完全一样&#xff0c;但是预训练模型的参数确实有助于提高训练的准确率&#xff0c;为了结合二者的优点&#xff0c;就需要我们加载部分预训练模型。 pretra…

冻结训练和解冻训练的区别

冻结训练与解冻训练 原理为什么进行冻结训练区别参考 原理 大部分深度学习框架&#xff08;例如pytorch和tensorflow&#xff09;都提供了一些比较经典&#xff0c;且预训练好的网络模型&#xff08;resnet、alexnet等&#xff09;&#xff0c;这些训练好的网络模型有较好的泛…

ceph--cephFS的使用

ceph分布式存储—cephFS的使用 1、cephfs的概念 ceph FS 即 ceph filesystem&#xff0c;可以实现文件系统共享功能,客户端通过 ceph 协议挂载并使 用 ceph 集群作为数据存储服务器。 Ceph FS 需要运行 Meta Data Services(MDS)服务&#xff0c;其守护进程为 ceph-mds&#x…

STM32 DMA 传输类型调试记录

外设到内存 模式&#xff1a;单次、外设地址不自增&#xff0c;内存地址自增 hdma_usart1_rx.Instance DMA1_Channel5; // 使用通道 5 hdma_usart1_rx.Init.Direction DMA_PERIPH_TO_MEMORY; // 方向&#xff1a;外设 to 内存 hdma_usart1_rx.Init.PeriphInc DMA_PINC…