【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
目录
一、实验介绍
二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容
0. 导入必要的工具包
1. 定义激活函数
logistic(z)
tanh(z)
relu(z)
leaky_relu(z, gamma=0.1)
2. 定义输入、权重、偏置
3. 计算净活性值
4. 绘制激活函数的图像
5. 应用激活函数并打印输出结果
6. 代码整合
一、实验介绍
本实验展示了使用PyTorch实现不同激活函数。
- 计算净活性值,并将其应用于Sigmoid、双曲正切、ReLU和带泄漏的修正线性单元函数。
- 绘制这些激活函数的图像、打印输出结果,展示了它们在不同输入范围内的行为和输出结果。
二、实验环境
本系列实验使用了PyTorch深度学习框架,相关操作如下:
1. 配置虚拟环境
conda create -n DL python=3.7
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn
2. 库版本介绍
软件包 | 本实验版本 | 目前最新版 |
matplotlib | 3.5.3 | 3.8.0 |
numpy | 1.21.6 | 1.26.0 |
python | 3.7.16 | |
scikit-learn | 0.22.1 | 1.3.0 |
torch | 1.8.1+cu102 | 2.0.1 |
torchaudio | 0.8.1 | 2.0.2 |
torchvision | 0.9.1+cu102 | 0.15.2 |
三、实验内容
ChatGPT:
前馈神经网络(Feedforward Neural Network)是一种常见的人工神经网络模型,也被称为多层感知器(Multilayer Perceptron,MLP)。它是一种基于前向传播的模型,主要用于解决分类和回归问题。
前馈神经网络由多个层组成,包括输入层、隐藏层和输出层。它的名称"前馈"源于信号在网络中只能向前流动,即从输入层经过隐藏层最终到达输出层,没有反馈连接。
以下是前馈神经网络的一般工作原理:
输入层:接收原始数据或特征向量作为网络的输入,每个输入被表示为网络的一个神经元。每个神经元将输入加权并通过激活函数进行转换,产生一个输出信号。
隐藏层:前馈神经网络可以包含一个或多个隐藏层,每个隐藏层由多个神经元组成。隐藏层的神经元接收来自上一层的输入,并将加权和经过激活函数转换后的信号传递给下一层。
输出层:最后一个隐藏层的输出被传递到输出层,输出层通常由一个或多个神经元组成。输出层的神经元根据要解决的问题类型(分类或回归)使用适当的激活函数(如Sigmoid、Softmax等)将最终结果输出。
前向传播:信号从输入层通过隐藏层传递到输出层的过程称为前向传播。在前向传播过程中,每个神经元将前一层的输出乘以相应的权重,并将结果传递给下一层。这样的计算通过网络中的每一层逐层进行,直到产生最终的输出。
损失函数和训练:前馈神经网络的训练过程通常涉及定义一个损失函数,用于衡量模型预测输出与真实标签之间的差异。常见的损失函数包括均方误差(Mean Squared Error)和交叉熵(Cross-Entropy)。通过使用反向传播算法(Backpropagation)和优化算法(如梯度下降),网络根据损失函数的梯度进行参数调整,以最小化损失函数的值。
前馈神经网络的优点包括能够处理复杂的非线性关系,适用于各种问题类型,并且能够通过训练来自动学习特征表示。然而,它也存在一些挑战,如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战,一些改进的网络结构和训练技术被提出,如卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks)等。
本系列为实验内容,对理论知识不进行详细阐释
(咳咳,其实是没时间整理,待有缘之时,回来填坑)
0. 导入必要的工具包
torch
:PyTorch深度学习框架的主要包。matplotlib.pyplot
:用于绘制图形的Python库。
# 导入必要的工具包
import torch
# 绘画时使用的工具包
import matplotlib.pyplot as plt
1. 定义激活函数
-
logistic(z)
- 实现逻辑斯蒂(Logistic)函数,将输入张量z应用于逻辑斯蒂函数的公式,并返回结果。
def logistic(z):return 1.0 / (1.0 + torch.exp(-z))
-
tanh(z)
- 实现双曲正切(Tanh)函数,将输入张量z应用于双曲正切函数的公式,并返回结果。
def tanh(z):return (torch.exp(z) - torch.exp(-z)) / (torch.exp(z) + torch.exp(-z))
-
relu(z)
- 实现修正线性单元(ReLU)函数,将输入张量z应用于ReLU函数的公式,并返回结果。
def relu(z):return torch.max(z, torch.zeros_like(z))
-
leaky_relu(z, gamma=0.1)
- 实现带泄漏的修正线性单元(Leaky ReLU)函数,将输入张量z应用于Leaky ReLU函数的公式,并返回结果。
def leaky_relu(z, gamma=0.1):positive = torch.max(z, torch.zeros_like(z))negative = torch.min(z, torch.zeros_like(z))return positive + gamma * negative
2. 定义输入、权重、偏置
x
:一个形状为(2, 5)的张量,代表两个样本,每个样本有5个特征。w
:一个形状为(5, 1)的张量,代表权重向量,其中每个权重与一个特征相对应。b
:一个形状为(1, 1)的张量,代表偏置项。
# x 表示两个含有5个特征的样本,x是一个二维的tensor
x = torch.randn((2, 5))
# w 表示含有5个参数的权重向量,w是一个二维的tensor
w = torch.randn((5, 1))
# 偏置项,b是一个二维的tensor,但b只有一个数值
b = torch.randn((1, 1))
3. 计算净活性值
z
:通过将输入张量x
与权重张量w
相乘,并加上偏置项b
得到的张量。
# 矩阵乘法,请注意 x 和 w 的顺序,与 b 相加时使用了广播机制
z = torch.matmul(x, w) + b
4. 绘制激活函数的图像
- 创建一个图像窗口,并绘制四个子图。
- 在第一个子图中绘制Sigmoid型激活函数和双曲正切函数的图像。
- 在第二个子图中绘制ReLU型激活函数和带泄漏的修正线性单元函数的图像。
- 添加图例,并显示图像。
# 从-10 到 10 每间隔0.01 取一个数
a = torch.arange(-10, 10, 0.01)
plt.figure()
# 在第一个子图中绘制Sigmoid型激活函数
plt.subplot(2, 2, 1)
plt.plot(a.tolist(), logistic(a).tolist(), color='red', label='logistic')
plt.plot(a.tolist(), tanh(a).tolist(), color='blue', linestyle='--', label='tanh')
# 在第二个子图中绘制ReLU型激活函数
plt.subplot(222)
plt.plot(a.tolist(), relu(a).tolist(), color='g', label='relu')
plt.plot(a.tolist(), leaky_relu(a).tolist(), color='black', linestyle='--', label='leaky relu')plt.legend()
plt.show()
5. 应用激活函数并打印输出结果
sig_output
:将净活性值z
应用于Sigmoid函数,得到激活后的输出。tan_output
:将净活性值z
应用于双曲正切函数,得到激活后的输出。relu_output
:将净活性值z
应用于ReLU函数,得到激活后的输出。- 打印输出结果。
# z为前面计算的净活性值
sig_output = torch.sigmoid(z)
tan_output = torch.tanh(z)
relu_output = torch.relu(z)
# 打印输出结果
print('sigmoid:', sig_output)
print('tanh:', tan_output)
print('ReLU:', relu_output)
6. 代码整合
# 导入必要的工具包
import torch
# 绘画时使用的工具包
import matplotlib.pyplot as plt# Logistic 函数
def logistic(z):return 1.0 / (1.0 + torch.exp(-z))# Tanh函数
def tanh(z):return (torch.exp(z) - torch.exp(-z)) / (torch.exp(z) + torch.exp(-z))# ReLU函数
def relu(z):return torch.max(z, torch.zeros_like(z))# leakyReLU函数
def leaky_relu(z, gamma=0.1):positive = torch.max(z, torch.zeros_like(z))negative = torch.min(z, torch.zeros_like(z))return positive + gamma * negative# x 表示两个含有5个特征的样本,x是一个二维的tensor
x = torch.randn((2, 5))
# w 表示含有5个参数的权重向量,w是一个二维的tensor
w = torch.randn((5, 1))
# 偏置项,b是一个二维的tensor,但b只有一个数值
b = torch.randn((1, 1))
# 矩阵乘法,请注意 x 和 w 的顺序,与 b 相加时使用了广播机制
z = torch.matmul(x, w) + b
# 画出激活函数的图像
# 从-10 到 10 每间隔0.01 取一个数
a = torch.arange(-10, 10, 0.01)
plt.figure()
# 在第一个子图中绘制Sigmoid型激活函数
plt.subplot(2, 2, 1)
plt.plot(a.tolist(), logistic(a).tolist(), color='red', label='logistic')
plt.plot(a.tolist(), tanh(a).tolist(), color='blue', linestyle='--', label='tanh')
# 在第二个子图中绘制ReLU型激活函数
plt.subplot(222)
plt.plot(a.tolist(), relu(a).tolist(), color='g', label='relu')
plt.plot(a.tolist(), leaky_relu(a).tolist(), color='black', linestyle='--', label='leaky relu')plt.legend()
plt.show()# z为前面计算的净活性值
sig_output = torch.sigmoid(z)
tan_output = torch.tanh(z)
relu_output = torch.relu(z)
# 打印输出结果
print('sigmoid:', sig_output)
print('tanh:', tan_output)
print('ReLU:', relu_output)
相关文章:
【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 定义激活函数 logistic(z) tanh(z) relu(z) leaky_relu(z, gamma0.1) 2. 定义输入、权重、偏置 3. 计算净活性值 4. 绘制激活函数的图像 5. 应用激活函数并…...
容器技术所涉及Linux内核关键技术
一、容器技术前世今生 1.1 1979年 — chroot 容器技术的概念可以追溯到1979年的UNIX chroot。 它是一套“UNIX操作系统”系统,旨在将其root目录及其它子目录变更至文件系统内的新位置,且只接受特定进程的访问。 这项功能的设计目的在于为每个进程提供…...
IPV4和IPV6,公网IP和私有IP有什么区别?
文章目录 1、什么是IP地址?1.1、背景1.2、交换机1.3、局域网1.4、广域网1.5、ISP 互联网服务提供商 2、IPV42.1、什么是IPV4?2.2、IPV4的组成2.3、NAT 网络地址转换2.4、端口映射 3、公网IP和私有IP4、IPV6 1、什么是IP地址? 1.1、背景 一台…...
高云FPGA系列教程(7):ARM GPIO外部中断
文章目录 [toc]GPIO中断简介FPGA配置常用函数MCU程序设计工程下载 本文是高云FPGA系列教程的第7篇文章。 本篇文章介绍片上ARM Cortex-M3硬核处理器GPIO外部的使用,演示按键中断方式来控制LED亮灭,基于TangNano 4K开发板。 参考文档:Gowin_E…...
Python爬虫:动态获取页面
动态网站根据用户的某些操作产生一些结果。例如,当网页仅在向下滚动或将鼠标移动到屏幕上时才完全加载时,这背后一定有一些动态编程。当您将鼠标指针悬停在某些文本上时,它会为您提供一些选项,它还包含一些动态.这是是一篇关于动态…...
大数据平台迁移后yarn连接zookeeper 异常分析
大数据平台迁移后yarn连接zookeeper 异常分析 XX保险HDP大数据平台机房迁移异常分析。 异常现象: 机房迁移后大部分组件都能正常启动Yarn 启动后8088 8042等端口无法访问Hive spark 作业提交到yarn会出现卡死。 【备注】虽然迁移,但IP不变。 1. Yarn连…...
Ubuntu Nginx 配置 SSL 证书
首先需要在 Ubuntu 中安装 Nginx 服务, 打开终端执行以下命令: $ sudo apt update $ sudo apt install nginx -y然后启动 Nginx 服务并设置为开机时自动启动, 执行以下命令: $ sudo systemctl start nginx $ sudo systemctl enable nginx最后再验证一下 Nginx 服务的当前状态…...
将本地前端工程中的npm依赖上传到Nexus
【问题背景】 用Nexus搭建了内网的依赖仓库,需要将前端工程中node_modules中的依赖上传到Nexus上,但是node_modules中的依赖已经是解压后的状态,如果直接机械地将其简单地打包上传到Nexus,那么无法通过npm install下载使用。故有…...
软考高级架构师下篇-16通信系统架构设计理论与实践
目录 1. 引言2. 通信系统网络架构3. 网络构建关键技术4. 网络构建5. 前文回顾1. 引言 此章节主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本节知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中…...
国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作
要用人工智能技术来庆祝国庆中秋,我们可以使用生成对抗网络(GAN)生成具有节日氛围的画作。这里将使用深度学习框架 TensorFlow 和 Keras 来实现。 一、生成对抗网络(GAN) 生成对抗网络(GANs,…...
stm32 串口发送和接收
串口发送 #include "stm32f10x.h" // Device header #include <stdio.h> #include <stdarg.h>//初始化串口 void Serial_Init() {//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Pe…...
Vite + Vue3 实现前端项目工程化
通过官方脚手架初始化项目 第一种方式,这是使用vite命令创建,这种方式除了可以创建vue项目,还可以创建其他类型的项目,比如react项目 npm init vitelatest 第二种方式,这种方式是vite专门为vue做的配置,…...
Java动态代理Aop的好处
1. 预备知识-动态代理 1.1 什么是动态代理 动态代理利用Java的反射技术(Java Reflection)生成字节码,在运行时创建一个实现某些给定接口的新类(也称"动态代理类")及其实例。 1.2 动态代理的优势 动态代理的优势是实现无侵入式的代…...
各种存储性能瓶颈如何分析与优化?
【摘要】本文结合实践剖析存储系统的架构及运行原理,深入分析各种存储性能瓶颈场景,并提出相应的性能优化手段,希望对同行有一定的借鉴和参考价值。 【作者】陈萍春,现就职于保险行业,拥有多年的系统、存储以及数据备…...
Android StateFlow初探
Android StateFlow初探 前言: 最近在学习StateFlow,感觉很好用,也很神奇,于是记录了一下. 1.简介: StateFlow 是一个状态容器式可观察数据流,可以向其收集器发出当前状态更新和新状态更新。还可通过其 …...
Docker Compose初使用
简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器(cont…...
测试与FastAPI应用数据之间的差异
【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 当使用两个不同的异步会话来测试FastAPI应用程序与数据库的连接时,可能会出现以下错误: 在测试中,在数据库中创建了一个对象&#x…...
WebStorm 2023年下载、安装教程、亲测有效
文章目录 简介安装步骤常用快捷键 简介 WebStorm 是JetBrains公司旗下一款JavaScript 开发工具。已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的…...
k8s储存卷
卷的类型 In-Tree存储卷插件 ◼ 临时存储卷 ◆emptyDir ◼ 节点本地存储卷 ◆hostPath, local ◼ 网络存储卷 ◆文件系统:NFS、GlusterFS、CephFS和Cinder ◆块设备:iSCSI、FC、RBD和vSphereVolume ◆存储平台:Quobyte、PortworxVolume、Sto…...
【解决Win】“ 无法打开某exe提示无法成功完成操作,因为文件包含病毒或潜在的垃圾软件“
在下载某个应用程序,打开时出现了“无法成功完成操作因为文件包含病毒或潜在垃圾”的提示,遇到这个情况怎么解决? 下面为大家分享故障原因及具体的处理方法。 故障原因 是由于杀毒 防护等原因引起的。 解决方案 打开Windows 安全中心 选择…...
SpringBoot调用ChatGPT-API实现智能对话
目录 一、说明 二、代码 2.1、对话测试 2.2、单次对话 2.3、连续对话 2.4、AI绘画 一、说明 我们在登录chatgpt官网进行对话是不收费的,但需要魔法。在调用官网的API时,在代码层面上使用,通过API KEY进行对话是收费的,不过刚…...
element-table出现错位解决方法
先看示例图,这个在开发中还是很常遇到的,在table切换不同数据时或者切换页面时,容易出现: 解决方法很简单,官方有提供方法: 我们可以在重新渲染数据后: this.$nextTick(() > {this.$refs.…...
DC电源模块具有不同的安装方式和安全规范
BOSHIDA DC电源模块具有不同的安装方式和安全规范 DC电源模块是将低压直流电转换为需要的输出电压的装置。它们广泛应用于各种领域和行业,如通信、医疗、工业、家用电器等。安装DC电源模块应严格按照相关的安全规范进行,以确保其正常运行和安全使用。 D…...
zabbix自定义监控、钉钉、邮箱报警
目录 一、实验准备 二、安装 三、添加监控对象 四、添加自定义监控项 五、监控mariadb 1、添加模版查看要求 2、安装mariadb、创建用户 3、创建用户文件 4、修改监控模版 5、在上述文件中配置路径 6、重启zabbix-agent验证 六、监控NGINX 1、安装NGINX,…...
短信、邮箱验证码本地可以,部署到服务器接口却不能使用
应对公司双验证要求,对本系统做邮箱、短信验证码登录,本地开发正常发送,到服务器上部署却使用失败,已全部解决,记录坑。 一、nginx拦截 先打开你的服务器 nginx.conf 看看有没有做接口拦截。(本地可能做Sp…...
Java web基础知识
Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet ,一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做,Servlet 初步…...
【Linux学习】01Linux初识与安装
Linux(B站黑马)学习笔记 01Linux初识与安装 文章目录 Linux(B站黑马)学习笔记前言01Linux初识与安装操作系统简述Linux初识虚拟机介绍安装VMware Workstation虚拟化软件VMware中安装CentOS7 Linux操作系统下载CentOS操作系统VMwa…...
android 将数据库中的 BLOB 对象动态加载为 XML,并设置到 Android Activity 的内容视图上
以下是一个示例代码,演示如何将数据库中的 BLOB 对象动态加载为 XML,并设置到 Android Activity 的内容视图上: ```java import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import and…...
Android12之强弱智能指针sp/wp循环引用死锁问题(一百六十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...
springboot自定义Json序列化返回,实现自动转换字典值
自定义序列化 原理 当你使用Spring Boot的Spring Data或者Spring MVC等组件来处理JSON序列化时,Spring框架会在需要将Java对象转换为JSON字符串时调用JsonSerializer。这通常发生在控制器方法返回JSON响应时,或者在将对象保存到数据库等操作中。 // 注册…...
网站显示备案号/深圳百度网站排名优化
首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责 1、删除原有的yum: rpm -aq | grep yum | xargs rpm -e –nodeps 2、安装新的yum 《1》rpm –ivh http://mirrors.163.com/centos/6/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm 注&…...
徐州人才网档案查询/seo内容优化是什么
1. 一个类可序列化的前提:实现Serializable接口 2. 一个属性不想序列化的方式:增加transient关键字 3. serialVersionUID 是表示一个类的序列化标识,和一个类的类名以及包路径一起组成类在序列化时的唯一标识。 4. 当两个jvm中存在serialVers…...
动态ip怎么做网站/百度人工申诉客服电话
Vue教程之前后端分离的演变史 一.为什么需要前后分离 1. 后端为主的 MVC 时代 为了降低开发的复杂度,以后端为出发点,比如:Struts、SpringMVC 等框架的使用,就是后端的 MVC 时代. 以 SpringMVC 流程为例: 发起请求到前端控制器(Dispatche…...
大学网站开发的流程/网络广告投放网站
NSCharacterSet *whitespace [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSString *username [mUsernameField stringValue]; username [username stringByTrimmingCharactersInSet:whitespace];...
房产中介网站开发费用/百度广告买下的订单在哪里找
/*1、实现如下类之间的继承关系,并编写Music类来测试这些类。*/package bbb;class instrument{ public void play(){ System.out.println("弹奏乐器"); } }class wind extends instrument{ public void play(){ System.out.println("弹奏wind")…...
信阳网站开发建设公司/网站推广的平台
1.概述进程、线程、协程 1.1什么是进程和线程 进程是什么呢? 应用程序运行的本身就是一个进程,比如 玩红警或者打开一个应用软件,我们都可以通过任务管理器查看到。 进程是操作系统结构的基础,是正在运行的程序。 总而言之&#x…...