网站的经营推广,网站后台什么语,湖南企业推广软件,网站建设公司的年报文章目录 1.构建神经网络2. 神经网络的优缺点 1.构建神经网络
在 pytorch 中定义深度神经网络其实就是层堆叠的过程#xff0c;继承自nn.Module#xff0c;实现两个方法#xff1a;
__init__方法中定义网络中的层结构#xff0c;主要是全连接层#xff0c;并进行初始化。… 文章目录 1.构建神经网络2. 神经网络的优缺点 1.构建神经网络
在 pytorch 中定义深度神经网络其实就是层堆叠的过程继承自nn.Module实现两个方法
__init__方法中定义网络中的层结构主要是全连接层并进行初始化。forward方法在实例化模型的时候底层会自动调用该函数。该函数中可以定义学习率为初始化定义的layer传入数据等。
我们来构建如下图所示的神经网络模型
编码设计如下
第1个隐藏层权重初始化采用标准化的xavier初始化 激活函数使用sigmoid。第2个隐藏层权重初始化采用标准化的He初始化 激活函数采用relu。out输出层线性层 假若二分类采用softmax做数据归一化。
# 创建神经网络
import torch
import torch.nn as nn
# pip install torchsummary
from torchsummary import summary # 计算模型参数查看模型结构 pip install torchsummary
# 创建神经网络模型类
class Model(nn.Module):# 初始化属性值def __init__(self):# 调用父类的初始化属性值super(Model, self).__init__()# 创建第一个隐藏层模型3个输入特征3个输出特征self.linear1 nn.Linear(3, 3)# 初始化权重 xavier 均匀分布初始化nn.init.xavier_uniform_(self.linear1.weight)# 创建第二个隐藏层3个输入特征上一层的输出特征,2个输出特征self.linear2 nn.Linear(3, 2)# 初始化权重 kaiming 正太分布初始化nn.init.kaiming_normal_(self.linear2.weight)# 创建输出层模型self.out nn.Linear(2, 2)# 创建向前传播方法自动执行 forward()方法def forward(self, x):# 数据经过第一个线性层x self.linear1(x)# 使用 sigmoid 激活函数x torch.sigmoid(x)# 数据经过第二个线性层x self.linear2(x)# 使用 relu 激活函数x torch.relu(x)# 数据经过输出层x self.out(x)# 使用 softmax 激活函数# dim-1每一维度行数据相机为1x torch.softmax(x, dim-1)return xif __name__ __main__:# 实例化model对象model Model()# 随机产生数据data torch.randn(5,3)print(data.shape,data.shape)# 数据经过神经网络模型训练out model(data)print(out.shape,out.shape)# 计算模型参数# 计算每层每个神经元的 w 和 b 个数总和summary(model,input_size(3,),batch_size5)# 查看模型参数print(查看模型参数w和b)for name, param in model.named_parameters():print(name, param)神经网络的输入数据是为[batch_size, in_features]的张量经过网络处理后获取了[batch_size, out_features]的输出张量。 在上述例子中batch_size5, in_features3,out_features2,结果如下所示 data.shape torch.Size([5, 3])
out.shape torch.Size([5, 2])模型参数输出 ----------------------------------------------------------------Layer (type) Output Shape Param #
Linear-1 [5, 3] 12Linear-2 [5, 2] 8Linear-3 [5, 2] 6Total params: 26
Trainable params: 26
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.00
Params size (MB): 0.00
Estimated Total Size (MB): 0.00
----------------------------------------------------------------
查看模型参数w和b
linear1.weight Parameter containing:
tensor([[ 0.3857, 0.4809, -0.0346],[ 0.3645, 0.2803, -0.6291],[ 0.1999, -0.6617, 0.7724]], requires_gradTrue)
linear1.bias Parameter containing:
tensor([0.3084, 0.5636, 0.4501], requires_gradTrue)
linear2.weight Parameter containing:
tensor([[ 0.1063, 0.7494, 0.4311],[-1.4152, 0.3396, -0.8590]], requires_gradTrue)
linear2.bias Parameter containing:
tensor([-0.3771, 0.2937], requires_gradTrue)
out.weight Parameter containing:
tensor([[-0.6012, 0.4727],[-0.2953, -0.5854]], requires_gradTrue)
out.bias Parameter containing:
tensor([-0.3271, 0.4940], requires_gradTrue)模型参数的计算
以第一个隐层为例该隐层有3个神经元每个神经元的参数为4个w1,w2,w3,b1所以一共用3x412个参数。输入数据和网络权重是两个不同的事儿对于初学者理解这一点十分重要要分得清。
2. 神经网络的优缺点
优点 ➢ 精度高性能优于其他的机器学习算法甚至在某些领域超过了人类。 ➢ 可以近似任意的非线性函数。 ➢ 近年来在学界和业界受到了热捧有大量的框架和库可供调。缺点 ➢ 黑箱很难解释模型是怎么工作的。 ➢ 训练时间长需要大量的计算资源。 ➢ 网络结构复杂需要调整超参数。 ➢ 部分数据集上表现不佳容易发生过拟合。