层和块基础知识:

1.涉及一个类class的用法:

        -1.非继承类,直接在类里面写操作,写函数即可

        -2.继承类:该类里面直接操作可以引用父类,但是构造函数要是需要使用父类的函数则需要在函数开头增加super().。

变量有两种,一种是对函数参数在函数内的调用,只在函数内有效则可以直接调用,如果需要让变量储存在类里供所有函数以及操作调用,需要使用.self

2.对于块内参数调用直接切片调用即可,

eg:rgnet[0][1][0].bias.data,这里指rgnet块的第一大块第二个子块的第一层偏置的本身

3.调用weight,bias时候,直接调用会标出可不可导,.data是直接tensor数据,.grad是导数

4.这里是两种常见的参数调用方式,第一种会输出一个元组,分别是名字和数据,而第二个只有数据:

m.named_parameters()和m.parameters()
对第一种:print(*[(name, param.shape) for name, param in net[0].named_parameters()])('weight', torch.Size([8, 4])) ('bias', torch.Size([8]))分别是当前层的权重和偏执,应为只要求了一层,所有没有层数提示。
print(*[(name, param.shape) for name, param in net.named_parameters()])
('0.weight', torch.Size([8, 4])) ('0.bias', torch.Size([8])) ('2.weight', torch.Size([1, 8])) ('2.bias', torch.Size([1]))分别是第一层的参数,第三层的参数

(这里解包是让输出好看,不然输出外层会有个[]

5.对块(网络)使用,参数分别是名字和要加入的新块。用于向原有块中加入新块。

.add_module

6.这里右边得到一个和m.weight同形的矩阵,是对绝对值大于5进行判断后得到的bool值,之后使原矩阵和这个bool矩阵相乘,bool矩阵会自动转变为0和1,结果就是得到一个绝对值大于5的元素归零的新矩阵。

m.weight.data *= m.weight.data.abs() >= 5

7.这是一个构造函数,用于将括号内的参数包装成可训练的参数赋予变量

nn.Parameter()

8.有两种快速保存模型参数防止事故丢失数据的方式:1.当只需要保存一些简单参数时,可以使用轻量化的快速存储:

torch.save(x, 'x-file'),把x保存在新建文件x-file中,可以通过x2 = torch.load('x-file')这样迅速获取文件内容。

2.需要保存整个模型当前所有参数,由于一般比较多比较大,所以使用:

torch.save(net.state_dict(), 'mlp.params'),第一个指定对应网络的所有参数,第二个指定保存文件,当需要调用(需要模型结构完全相同),
clone = MLP(),clone.load_state_dict(torch.load('mlp.params')),(假设原模型是MLP()),只需要使用该函数即可将参数直接施加到模型上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值