德州建设信息网站wordpress 百度云
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:27
当前位置: 首页 > news >正文
德州建设信息网站,wordpress 百度云,龙江做网站,wordpress 文章不同背景图片一、神经网络 1、神经网络 人工神经网络#xff08;Artificial Neural Network#xff0c;即ANN#xff09;也简称为神经网络#xff08;NN#xff09;是一种模仿生物神经网络结构 和功能的计算模型。 2、基本部分 输入层#xff1a;输入 x 输出层#xff1a;输出 y 隐…一、神经网络 1、神经网络 人工神经网络Artificial Neural Network即ANN也简称为神经网络NN是一种模仿生物神经网络结构 和功能的计算模型。 2、基本部分 输入层输入 x 输出层输出 y 隐藏层输入与输出之间所有层 3、特点 同一层的神经元之间没有连接 第 N 层的每个神经元和第 N-1层 的所有神经元相连full connected)即全连接神经网络 第 N-1层神经元的输出就是第 N 层神经元的输入 每个连接都有一个权重值w系数和b系数 二、激活函数 用于对每层的输出数据进行变换进而为整个网络注入了非线性因素。此时, 神经网络就可以拟合各种曲线 1、sigmoid 激活函数 公式 求导公式 绘制函数图像 import torch import matplotlib.pyplot as plt# 函数图像 x torch.linspace(-20,20,1000)
输入值x 通过 sigmoid函数 转换成 激活值y
y torch.sigmoid(x)# 创建画布、坐标轴 plt.plot(x,y) plt.grid() plt.show()# 导数图像 x torch.linspace(-20,20,1000,requires_gradTrue)
自动微分
torch.sigmoid(x).sum().backward()plt.plot(x.detach(),x.grad) plt.grid() plt.show() sigmoid 函数可以将任意的输入映射到 (0, 1) 之间当输入的值大致在 -6 或者 6 时意味着输入任何值 得到的激活值都是差不多的这样会丢失部分信息。比如输入 100 和输出 10000 经过 sigmoid 的激活值几乎都是等于 1 的但是输入的数据之间相差 100 倍的信息就丢失了。 对于 sigmoid 函数而言输入值在 [-6, 6] 之间输出值才会有明显差异输入值在 [-3, 3] 之间才会有比较好的效果。 通过上述导数图像我们发现 导数 数值范围是 (0, 0.25) 当输入 -6 或者 6 时 sigmoid 激活函数图像的 导数接近为 0 此时网络参数 将 更新 极其 缓慢 或者 无法更新 。 一般来说 sigmoid 网络在 5 层之内 就会产生 梯度消失 现象。而且该激活函数并不是以 0 为中心的所以在实践中这种激活函数使用的很少。sigmoid 函数一般只用于 二分类 的 输出层。 2、tanh 激活函数 公式 求导公式 函数图像 Tanh 函数将 输入 映射到 (-1, 1) 之间 图像以 0 为中心在 0 点对称当输入 大概-3 或者 3 时将被映射为 -1 或者 1。 其 导数值 范围 (0, 1) 当输入的值大概 -3 或者 3 时其导数 近似 0。 与 Sigmoid 相比它是 以 0 为中心 的且梯度相对于sigmoid大使得其收敛速度要比 Sigmoid 快 减少迭代次数。然而从图中可以看出Tanh 两侧的导数也为 0同样会造成 梯度消失。 若使用时可在 隐藏层 使用 tanh函数 在 输出层使用sigmoid函数 。 3、ReLU 激活函数 公式 f (x) max (0x) 求导公式 f (x) 0 或 1 函数图像 ReLU 激活函数将小于 0 的值映射为 0而大于 0 的值则保持不变它更加重视正信号而忽略负信号这种激活函数运算更为简单能够提高模型的训练效率 当x0时ReLU导数为0而当x0时则不存在饱和问题。所以ReLU 能够在x0时保持梯度不衰减从而缓解梯度消失问题。然而随着训练的推进部分输入会落入小于0区域导致对应权重无法更新。这种现象被称为“神经元死亡” ReLU是目前最常用的激活函数。与sigmoid相比ReLU的优势是采用sigmoid函数计算量大指数运算反向传播求误差梯度时计算量相对大而采用Relu激活函数整个过程的计算量节省很多。 sigmoid函数反向传播时很容易就会出现梯度消失的情况从而无法完成深层网络的训练。 Relu会使一部分神经元的输出为0这样就造成了网络的稀疏性并且减少了参数的相互依存关系缓解了过拟合问题的发生。 4、SoftMax 激活函数 softmax用于多分类过程中它是二分类函数sigmoid在多分类上的推广目的是将多分类的结果以概率的形式展现出来公式如下 Softmax 就是将网络输出的 logits 通过 softmax 函数就映射成为(0,1)的值而这些值的累和 为1满足概率的性质那么我们将它理解成概率选取概率最大也就是值对应最大的节点作为我们的预测目标类别。 scores torch.tensor([0.2, 0.02, 0.15, 0.15, 1.3, 0.5, 0.06, 1.1, 0.05, 3.75]) probabilities torch.softmax(scores,dim0) print(probabilities) 输出结果 5、其他激活函数 6、选择方法 对于 隐藏层 1. 优先选择 ReLU激活函数 2. 如果ReLu效果不好那么尝试其他激活如Leaky ReLu等。 3. 如果使用了ReLU 需要注意Dead ReLU问题 避免出现大的梯度从而导致过多的神经元死亡。 4. 少用sigmoid激活函数可以尝试使用tanh激活函数 对于 输出层 1. 二分类 问题选择 sigmoid激活函数 2. 多分类 问题选择 softmax激活函数 3. 回归 问题选择 identity 激活函数 三、参数初始化 1、均匀分布 初始化 权重参数初始化从区间均匀随机取值即在均匀分布中生成当前神经元的权重d为每个神经元的输入数量 import torch import torch.nn.functional as F import torch.nn as nn
均匀分布 随机初始化
def test01():linear nn.Linear(5, 3)# 从 0 ~ 1 均匀分布产生参数nn.init.uniform_(linear.weight)print(linear.weight.data) 2、正态分布 初始化 随机初始化从均值为0标准差为1的高斯分布中取样使用一些很小的值对参数W进行初始化
正态分布随机初始化
def test05():linear nn.Linear(5, 3)nn.init.normal_(linear.weight, mean0, std1)print(linear.weight.data) 3、全0 初始化 将神经网络中的所有权重参数初始化为 0
全0初始化
def test03():linear nn.Linear(5, 3)nn.init.zeros_(linear.weight)print(linear.weight.data) 4、全1 初始化 将神经网络中的所有权重参数初始化为 1
全1初始化
def test04():linear nn.Linear(5, 3)nn.init.ones_(linear.weight)print(linear.weight.data) 5、固定值初始化 将神经网络中的所有权重参数初始化为 某个固定值
固定初始化
def test02():linear nn.Linear(5, 3)nn.init.constant_(linear.weight, 5)print(linear.weight.data) 6、kaiming 初始化 正态化的HE初始化均值为0stddev方差 均匀分布的HE初始化从 [ -limitlimit ] 的均匀分布中抽取样本limit input输入神经元的个数
kaiming 初始化
def test06():# kaiming 正态分布初始化linear nn.Linear(5, 3)nn.init.kaimingnormal(linear.weight)print(linear.weight.data)# kaiming 均匀分布初始化linear nn.Linear(5, 3)nn.init.kaiminguniform(linear.weight)print(linear.weight.data) 7、xavier 初始化 正态化的Xavier初始化均值为0stddev方差 均匀分布的Xavier初始化从 [ -limitlimit ] 的均匀分布中抽取样本limit input输入神经元的个数output输出神经元的个数
xavier 初始化
def test07():# xavier 正态分布初始化linear nn.Linear(5, 3)nn.init.xaviernormal(linear.weight)print(linear.weight.data)# xavier 均匀分布初始化linear nn.Linear(5, 3)nn.init.xavieruniform(linear.weight)print(linear.weight.data) 一般我们在使用 PyTorch 构建网络模型时每个网络层的参数都有默认的初始化方法优先选择 kaming的初始化、xavier初始化方式。 四、网络搭建 和 参数计算 在pytorch中定义深度神经网络其实就是层堆叠的过程继承自nn.Module实现两个方法 1. init方法中定义网络中的层结构主要是全连接层并进行初始化 2. forward方法在实例化模型的时候底层会自动调用该函数。该函数中可以定义学习率 及数据传输方式。 构建如下图所示的神经网络模型 编码设计如下 1. 第1个隐藏层权重采用标准化的 xavier初始化激活函数 使用 sigmoid 2. 第2个隐藏层权重采用标准化的 HE初始化激活函数 用 relu 3. out 输出层采用 softmax 做数据归一化 import torch import torch.nn as nn from torchsummary import summary # 计算模型参数,查看模型结构# 构建神经网络 class model(nn.Module):# 初始化属性值def init(self):# 调用父类的初始化属性值super(model,self).init()# 创建第一个隐藏层模型, 3个输入特征,3个输出特征self.layer1 nn.Linear(3,3)# 初始化权重nn.init.xaviernormal(self.layer1.weight)# 创建第二个隐藏层模型self.layer2 nn.Linear(3,2)# 初始化权重nn.init.kaimingnormal(self.layer2.weight)# 创建输出层模型self.out nn.Linear(2,2)# 创建前向传播方法,自动执行forward()方法def forward(self,x):# 数据经过第一个线性层h1 self.layer1(x)# 使用sigmoid激活函数h1 torch.sigmoid(h1)# 数据经过第二个线性层h2 self.layer2(h1)# 使用relu激活函数h2 torch.relu(h2)# 数据经过输出层out self.out(h2)# 使用softmax激活函数out torch.softmax(out,dim-1)return outif name main:# 实例化model对象my_model model()# 随机产生数据my_data torch.randn(5,3)print(mydata shape,my_data.shape)# 数据经过 神经网络模型训练output my_model(my_data)print(output shape,output.shape)# 计算模型参数# 计算每层每个神经元的w和b个数总和summary(my_model,input_size(3,),batch_size5)# 查看模型参数for name,parameter in my_model.named_parameters():print(name,parameter) 输出结果 神经网络的优缺点 优点 1. 精确度高、性能好、效果好 2. 拟合任意非线性的关系 3. 框架多无需自己造轮子 缺点 1. 黑箱可解释性差 2. 网络结构复杂超参数多超参数需要人工设置 3. 需要大量的数据进行训练训练时间长对算力有较高要求 4. 小数据集容易过拟合
- 上一篇: 德源网站建设西湖区外贸网站建设
- 下一篇: 德州哪家网站优化公司专业衡阳手机网站设计
相关文章
-
德源网站建设西湖区外贸网站建设
德源网站建设西湖区外贸网站建设
- 技术栈
- 2026年03月21日
-
德阳做网站的公司百度添加到桌面
德阳做网站的公司百度添加到桌面
- 技术栈
- 2026年03月21日
-
德阳住房和城乡建设厅网站一个网站的建设需要什么
德阳住房和城乡建设厅网站一个网站的建设需要什么
- 技术栈
- 2026年03月21日
-
德州哪家网站优化公司专业衡阳手机网站设计
德州哪家网站优化公司专业衡阳手机网站设计
- 技术栈
- 2026年03月21日
-
德州哪里有做网站的做网站界面尺寸是多少
德州哪里有做网站的做网站界面尺寸是多少
- 技术栈
- 2026年03月21日
-
德州市经济开发区建设局网站企业系统集成
德州市经济开发区建设局网站企业系统集成
- 技术栈
- 2026年03月21日






