首页 > 其他分享 >神经网络-激活函数

神经网络-激活函数

时间:2024-06-07 21:01:11浏览次数:22  
标签:初始化 函数 nn axes Linear weight 神经网络 激活 linear

深度学习中的激活函数与神经网络初始化

在深度学习中,激活函数和网络的初始化对于模型的性能和收敛性至关重要。本文将探讨不同类型的激活函数,并展示如何使用PyTorch进行神经网络参数的初始化。

激活函数对比

激活函数是神经网络中的关键组成部分,它们在神经元之间引入非线性,使得网络能够学习和模拟复杂的数据关系。

Tanh 函数

Tanh(双曲正切)函数是一种常见的激活函数,它的输出范围在-1到1之间。

函数图像

python

复制

import torch
import matplotlib.pyplot as plt

# 创建画布和坐标轴
_, axes = plt.subplots(1, 2)

# 函数图像
x = torch.linspace(-20, 20, 1000)
y = torch.tanh(x)
axes[0].plot(x, y)
axes[0].grid()
axes[0].set_title('Tanh 函数图像')

# 导数图像
x = torch.linspace(-20, 20, 1000, requires_grad=True)
torch.tanh(x).sum().backward()
axes[1].plot(x.detach(), x.grad)
axes[1].grid()
axes[1].set_title('Tanh 导数图像')
plt.show()

ReLU 函数

ReLU(修正线性单元)是当前最流行的激活函数之一,它在正输入时输出相同值,在负输入时输出为零。

函数图像

python

复制

import torch
from matplotlib import pyplot as plt

_, axes = plt.subplots(1, 2)

# 函数图像
x = torch.linspace(-20, 20, 1000)
y = torch.relu(x)
axes[0].plot(x, y)
axes[0].grid()
axes[0].set_title('ReLU 函数图像')

# 导数图像
x = torch.linspace(-20, 20, 1000, requires_grad=True)
torch.relu(x).sum().backward()
axes[1].plot(x.detach(), x.grad)
axes[1].grid()
axes[1].set_title('ReLU 导数图像')
plt.show()

神经网络初始化参数与技术选型

神经网络的初始化对于模型的学习能力和泛化性能至关重要。以下是几种常见的初始化技术:

均匀分布随机初始化

python

复制

def test01():
    Linear=nn.Linear(5,3)
    nn.init.uniform_(Linear.weight)
    print(Linear.weight.data)

固定初始化

python

复制

def test02():
    Linear=nn.Linear(5,3)
    nn.init.constant_(Linear.weight,5)
    print(Linear.weight.data)

全0初始化

python

复制

def test03():
    linear=nn.Linear(5,3)
    nn.init.zeros_(linear.weight)
    print(linear.weight.data)

全1初始化

python

复制

def test04():
    linear=nn.Linear(5,3)
    nn.init.ones_(linear.weight)
    print(linear.weight.data)

正态分布随机初始化

python

复制

def test05():
    linear=nn.Linear(5,3)
    nn.init.normal_(linear.weight,mean=0,std=1)
    print(linear.weight.data)

Kaiming 初始化

python

复制

def test06():
    # kaiming 正态分布初始化
    linear=nn.Linear(5,3)
    nn.init.kaiming_normal_(linear.weight)
    print(linear.weight.data)

    # kaiming 均匀分布初始化
    linear=nn.Linear(5,3)
    nn.init.kaiming_uniform_(linear.weight)
    print(linear.weight.data)

Xavier 初始化

python

复制

def test07():
    # xavier 正太分布初始化
   linear=nn.Linear(5,3)
   nn.init.xavier_normal_(linear.weight)
   print(linear.weight.data)

   # xavier 均匀分布初始化
   linear=nn.Linear(5,3)
   nn.init.xavier_uniform_(linear.weight)
   print(linear.weight.data)

在实际应用中,选择合适的初始化方法对于网络的性能至关重要。通常,对于不同的网络层和激活函数,会有更合适的初始化策略。例如,ReLU激活函数通常与He初始化(即Kaiming初始化的变体)一起使用。

标签:初始化,函数,nn,axes,Linear,weight,神经网络,激活,linear
From: https://blog.csdn.net/qq_45003504/article/details/139535401

相关文章

  • 基于函数计算部署GPT-Sovits语音生成模型实现AI克隆声音
    GPT-Sovits是一个热门的文本生成语音的大模型,只需要少量样本的声音数据源,就可以实现高度相似的仿真效果。通过函数计算部署GPT-Sovits模型,您无需关心GPU服务器维护和环境配置,即可快速部署和体验模型,同时,可以充分利用函数计算按量付费,弹性伸缩等优势,高效地为用户提供基于GPT-Sovits......
  • C语言基础——函数
             ʕ•ᴥ•ʔ       づ♡ど ......
  • 【YOLOv8改进】YOLOv8 更换损失函数之 SIoU EIoU WIoU _ Focal_*IoU CIoU DIoU ShapeI
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例GIoU文章链接论文地址:论文地址代码地址:代码地址基本原理广义Io......
  • 【YOLOv8改进】SlideLoss损失函数,解决样本不平衡问题
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例介绍摘要近年来,基于深度学习的人脸检测算法取得了很大进展。这些......
  • 函数返回的是非类型而不是列表
    我正在使用opencv制作人脸检测器,我制作了两个检测器,分别检测两个正面的哈拉卡斯卡特。然后,我编写了一段代码,只有当两个检测器检测到同一区域时,才会显示矩形。这样做效果很好,但当我把同样的代码放到函数中时,它就会返回非类型。如果我将矩形绘制放在函数内,它就会工作,但放在函数外......
  • scanf(),gets(),puts(),fgets()函数的使用
     scanf()scanf按%d输入数字或%s输入字符串时,忽略空格、回车或制表符等空白字符(被作为数据的分隔符) intmain(){ inta=0; intb=0; charc[12]; scanf("%s",&c); printf("c=%s",c); return0;}空格后面的world没有被读进去加一句scanf语句,world被读走了in......
  • 基于助听器开发的一种高效的语音增强神经网络
    现代语音增强算法利用大量递归神经网络(RNNs)实现了显著的噪声抑制。然而,大型RNN限制了助听器硬件(hearingaidhardware,HW)的实际部署,这些硬件是电池供电的,运行在资源受限的微控制器单元(microcontrollerunits,MCU)上,内存和计算能力有限。在这项工作中,我们使用模型压缩技术来弥补......
  • 【JS封装-数组操作】强化编程实践:精选JavaScript函数封装集锦-关于数组操作(数组去重、
    目录数组去重数组快速排序过滤数组映射数组数组扁平化数组求和数组最大值数组最小值数组切片数组乱序(洗牌算法)数组去重/***去除数组中的重复项。*@param{Array}array要去重的数组。*@returns{Array}去重后的数组。*/functionuniqueArray(array......
  • c++“二纯” 纯虚函数和纯虚析构
    首先给出这样一段概念:在C++中,当基类包含纯虚函数时,这些纯虚函数在基类中不需要(也不能)有定义。但是,如果基类有一个纯虚析构函数(即析构函数被声明为纯虚函数),那么情况就有些特殊了。纯虚析构函数需要在基类中有声明,但通常也需要在类外提供一个定义(尽管这个定义通常只包含析构函数......
  • 【JavaScript函数】
    函数:是被设计为执行特定任务的代码块。作用:代码重用,结构清晰1.1、定义函数定义函数有两种方法:函数声明和函数表达式:1.1.1、函数声明解释:这里声明一个函数f,并传入一个参数a,当函数执行以后,通过return关键字返回了a+1的值。1.1.2、函数表达式通过定义一个匿......