写代码的思路为:
首先导入torch.nn库,然后基于继承nn.Module的方法构建深度学习模块。整个模块的函数主要由两部分组成:
通过__init__方法初始化整个模型,forward方法对该模型进行前向计算。其中,在使用__init__方法的时候,可以在类内部初始化子模块,然后在forward方法中调用这些初始化的子模块,最后输出结果张量。
具体例子如下:
import torch
import torch.nn as nn
class LinearModel(nn.Module):
def __init__(self, ndim):
super(LinearModel, self).__init__() # 这里使用super函数来获取当前类的父类
self.ndim = ndim # 定义权重的个数,即特征的个数
self.weight = nn.Parameter(torch.randn(ndim,1)) # 定义权重
self.bias = nn.Parameter(torch.randn(1)) # 定义偏置
def forward(self,x):
return x.mm(self.weight) + self.bias
if __name__=="__main__":
lm = LinearModel(5) # 定义线性回归模型,特征数为5
x = torch.randn(4,5) # 定义随机输入,迷你批次大小为4
print(lm(x)) # 输出为4*1的矩阵,相当于输出了4个批次的每个批次的结果
print((lm.named_parameters())) # 获取模型参数的生成器(带名字)
print(list(lm.named_parameters())) # 转换生成器为列表
print(lm.parameters()) # 获取模型参数的生成器(不带名字)
print(list(lm.parameters()))
print(lm.cuda()) # 将模型参数转移到GPU上
print(list(lm.parameters()))
print(lm.half()) # 转换模型参数为半精度浮点数
print(list(lm.parameters()))
Done!!!