ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

4.Introduction to PyTorch YouTube Series--Models

4.Introduction to PyTorch YouTube Series--Models 前言学习地址torch.nn.Module 与 torch.nn.Parameterpytorch为构建深度学习网络提供了一些工具比如torch.nn.Module而多数时候我们都在使用它的子类比如torch.nn.Linear、torch.nn.Conv2d这些网络层。如果某个Module子类具有可学习的权重这些权重会被表示为torch.nn.Parameter的实例这些参数可以通过Module类的parameters()方法进行访问。__init__()方法用于定义模型的层和其他组件还有一个forward()方法用于执行计算classTinyModel(torch.nn.Module):def__init__(self):super().__init__()self.linear1torch.nn.Linear(100,200)self.activationtorch.nn.ReLU()self.linear2torch.nn.Linear(200,10)self.softmaxtorch.nn.Softmax(dim1)defforward(self,x):xself.linear1(x)xself.activation(x)xself.linear2(x)xself.softmax(x)returnxdeft1():tinymodelTinyModel()print(------------model--------------)print(tinymodel)print(------------layer2--------------)print(tinymodel.linear2)print(---------model params:----------)forparamintinymodel.parameters():print(param)print(---------linear2 params:----------)forparamintinymodel.linear2.parameters():print(param)对于这样的打印主要可以帮助我们看到参数是否在追踪梯度即是否为可训练参数以linear2为例---------linear2 params:----------Parameter containing:tensor([[-0.0458,-0.0434,-0.0089,...,-0.0417,0.0485,-0.0101],[-0.0112,-0.0356,-0.0016,...,-0.0072,-0.0128,0.0446],[0.0183,-0.0657,-0.0431,...,0.0020,-0.0162,0.0419],...,[0.0503,-0.0601,-0.0202,...,0.0217,-0.0241,0.0369],[0.0705,0.0681,-0.0590,...,0.0478,-0.0053,0.0284],[-0.0291,-0.0080,-0.0475,...,0.0056,-0.0405,0.0478]],requires_gradTrue)Parameter containing:tensor([0.0667,-0.0628,0.0284,-0.0092,0.0397,0.0116,0.0608,0.0119,0.0629,0.0663],requires_gradTrue)神经网络常用的学习层Linear Layers线性层在这种层中每个输入都会以一定程度影响该层的每个输出而影响程度由该层的权重决定如果一个模型有 m 个输入和 n 个输出那么其权重将是一个 m×n 的矩阵。例如deft2():lintorch.nn.Linear(3,2)xtorch.rand(1,3)print(------weight and bias parameters------)forparaminlin.parameters():print(param)ylin(x)print(--------------output------------------)print(y)lin所做的事情本质上就是将输入 x 与线性层的权重进行矩阵乘法再加上偏置你会发现结果正是输出向量 y即y xweight b最后的输出也是一个12的张量线性层最常用的就是做分类器比如有n个输出就表示需要处理的n个类别。卷积层最大的特点就是能提取特征卷积层就像一个在图像上扫描的窗口寻找它能够识别的某种模式这些模式被称为特征卷积核的大小就是窗口的大小。卷积层的输出是一个激活图相当于一个特征热力图。但需要注意的是特征的提取是从数据中学出来的而不是通过给定特征匹配出来的。1.在模型初始化时卷积核里的每一个数值权重都是随机的小数。2.训练才是关键将带标签的数据喂给模型比如猫数据集用0表示狗数据集用数字1表示经过前向传播后得到一个预测结果计算损失后进行反向传播即通过梯度下降算法推导应该调整哪些参数。3.当训练结束后所谓的期望特征就是训练好的、固定的卷积核权重数值最后体现在训练代码中重要的就是定义优化器和损失函数optimizertorch.optim.SGD(model.parameters(),lr0.01)这行代码告诉程序模型里的所有参数都要根据梯度去更新循环层主要用于处理一连串有前后关联的数据即生成后面内容需要记得前文。
返回列表