【深度学习实验】前馈神经网络(一):使用PyTorch构建神经网络的基本步骤

news2024/11/26 17:35:28

目录

一、实验介绍

 二、实验环境

1. 配置虚拟环境

2. 库版本介绍

三、实验内容

0. 导入库

1. 定义x,w,b

2. 计算净活性值z

3. 实例化线性层并进行前向传播

4. 打印结果

5. 代码整合


一、实验介绍

        本实验使用了PyTorch库来构建和操作神经网络模型,主要是关于线性层(Linear Layer)的使用。

 二、实验环境

        本系列实验使用了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. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

三、实验内容

ChatGPT:

        前馈神经网络(Feedforward Neural Network)是一种常见的人工神经网络模型,也被称为多层感知器(Multilayer Perceptron,MLP)。它是一种基于前向传播的模型,主要用于解决分类和回归问题。

        前馈神经网络由多个层组成,包括输入层、隐藏层和输出层。它的名称"前馈"源于信号在网络中只能向前流动,即从输入层经过隐藏层最终到达输出层,没有反馈连接。

以下是前馈神经网络的一般工作原理:

  1. 输入层:接收原始数据或特征向量作为网络的输入,每个输入被表示为网络的一个神经元。每个神经元将输入加权并通过激活函数进行转换,产生一个输出信号。

  2. 隐藏层:前馈神经网络可以包含一个或多个隐藏层,每个隐藏层由多个神经元组成。隐藏层的神经元接收来自上一层的输入,并将加权和经过激活函数转换后的信号传递给下一层。

  3. 输出层:最后一个隐藏层的输出被传递到输出层,输出层通常由一个或多个神经元组成。输出层的神经元根据要解决的问题类型(分类或回归)使用适当的激活函数(如Sigmoid、Softmax等)将最终结果输出。

  4. 前向传播:信号从输入层通过隐藏层传递到输出层的过程称为前向传播。在前向传播过程中,每个神经元将前一层的输出乘以相应的权重,并将结果传递给下一层。这样的计算通过网络中的每一层逐层进行,直到产生最终的输出。

  5. 损失函数和训练:前馈神经网络的训练过程通常涉及定义一个损失函数,用于衡量模型预测输出与真实标签之间的差异。常见的损失函数包括均方误差(Mean Squared Error)和交叉熵(Cross-Entropy)。通过使用反向传播算法(Backpropagation)和优化算法(如梯度下降),网络根据损失函数的梯度进行参数调整,以最小化损失函数的值。

        前馈神经网络的优点包括能够处理复杂的非线性关系,适用于各种问题类型,并且能够通过训练来自动学习特征表示。然而,它也存在一些挑战,如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战,一些改进的网络结构和训练技术被提出,如卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks)等。

本系列为实验内容,对理论知识不进行详细阐释

(咳咳,其实是没时间整理,待有缘之时,回来填坑)

0. 导入库

引入了PyTorch库中的相关模块和一些用于绘图和加载数据集的外部库。

import torch
from torch import nn
import torch.nn.functional as F
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

加载鸢尾花数据集(此处代码未给出具体加载数据集的步骤)。

1. 定义x,w,b

        定义神经网络模型的输入张量x、权重张量w和偏置项张量b:

x = torch.randn((2, 5))
w = torch.randn((5, 1))
b = torch.randn((1, 1))

  

2. 计算净活性值z

z = torch.matmul(x, w) + b
z_2 = x @ w + b

        通过矩阵乘法计算净活性值z,其中x表示输入特征,w表示权重,b表示偏置项。两种写法都是等效的,可以使用`torch.matmul()`函数或`@`运算符进行矩阵乘法操作。

3. 实例化线性层并进行前向传播

net = nn.Linear(5, 1)
z_3 = net(x)

        `nn.Linear()`函数实例化了一个线性层,指定输入维度为5,输出维度为1。然后将输入张量x传递给该线性层进行前向传播计算,得到输出张量z_3。

4. 打印结果

print('output z:', z)
print('shape of z: ', z.shape)
print('output z_2:', z_2)
print('shape of z:', z_2.shape)
print('output z2: ', z_3)
print('shape of z2:', z_3.shape)

        打印计算结果以及张量的形状信息(方便查看和调试)。

5. 代码整合

# 导入必要的工具包
import torch
from torch import nn

# 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
# 另一种写法
z_2 = x @ w + b
# 打印结果,z是一个二维的tensor,表示两个样本经过神经元后的各自净活性值
print('output z:', z)
print('shape of z: ', z.shape)
print('output z_2:', z_2)
print('shape of z:', z_2.shape)

# 实例化一个线性层,接受输入维度是5,输出维度是1
net = nn.Linear(5, 1)
z_3 = net(x)
# 打印结果,z2的形状与z一样,含义也与z一样
print('output z2: ', z_3)
print('shape of z2:', z_3.shape)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频账号矩阵运营

短视频伴随着用户数量的不断增加,越来越多的企业开始将短视频纳入其品牌推广和营销战略中。然而,短视频矩阵账号运营并非易事,需要一定的策略和技巧。本文将探讨短视频矩阵账号运营的方法和常见问题,并提供解决方案。 一、策略和…

加强半圆头方颈螺栓的型式尺寸

声明 本文是学习github5.com 网站的报告而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了加强半圆头方颈螺栓的型式尺寸、技术条件和标记。 本文件适用于螺纹规格为 M6~M20, 产品等级为 B 级(A 型)和 C 级(B 型)的加强…

【Vue】修饰符表单提交方式自定义组件

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Vue快速入门》。🎯🎯 &…

[MySQL]基本介绍及安装使用详细讲解

简单介绍 数据库 (DataBase),简称DB 顾名思义,即存储数据的仓库,数据是有组织的进行存储 数据库管理系统(DataBase Management System),简称DBMS 管理数据库的大型软件 SQL(Structured Query Language),简称SQL&…

(附12306抢票脚本)国庆长假马上来啦,Python分析【去哪儿旅游攻略】数据,制作可视化图表

目录 前言环境使用模块使用数据来源分析 代码实现导入模块请求数据解析保存 数据可视化导入模块、数据年份分布情况月份分布情况出行时间情况费用分布情况人员分布情况 前言 2023年的中秋节和国庆节即将来临,好消息是,它们将连休8天!这个长假…

java学习--day10 (继承)

文章目录 day9作业今天的内容1.继承1.1.生活中的继承1.2.Java中继承1.3关于父类子类的内存分析1.4重写【重点】1.5重载【overload】 day9作业 1.构造代码块和构造方法的区别 {代码块 } public 类名 () {} 都是实例化一个对象的时候执行的 只不过构造代码…

VSCode『SSH』连接服务器『GUI界面』传输

前言 最近需要使用实验室的服务器训练带有 GUI 画面的 AI 算法模型(pygame),但是我是使用 SSH 连接的,不能很好的显示模型训练的效果画面,所以下面将会讲解如何实现 SSH 连接传输 Linux GUI 画面的 注:我们…

面试官:什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、什么是虚拟DOM 二、为什么需要虚拟DOM 三、如何实现虚拟DOM 小结 一、什么是虚拟DOM 虚拟 DOM &#xff08…

统计物理学复习----粒子的最概然分布

热力学中,每个粒子都是相同的统计物理学中,每个粒子是有差别的,对差别的不同处理方式决定了不同的统计理论理论力学中,质点可以用r个广义坐标与r个广义动量描述,这2r个变量的基构成了一个参数空间 经典统计理论 自由粒…

WorkPlus打造企业移动门户,实现高效协作与便捷访问

在移动互联网的时代,企业对于高效的协作和便捷的访问需求日益增长。WorkPlus作为领先品牌,致力于打造企业移动门户,帮助企业实现高效协作与便捷访问。本文将重点介绍WorkPlus如何通过创新的解决方案,为企业提供定制化的企业移动门…

netty server端启动源码阅读分析

服务端的启动通过ServerBootstrap类来完成,ServerBootstrap内有以下主要属性 ServerBootstrap extends AbstractBootstrap {//处理channel连接事件的线程组EventLoopGroup group;//处理channel其它事件的线程组EventLoopGroup childGroup;//创建channel的工厂类Cha…

基于PyTorch搭建Mask-RCNN实现实例分割

基于PyTorch搭建Mask-RCNN实现实例分割 在这篇文章中,我们将讨论 Mask RCNN Pytorch 背后的理论以及如何在 PyTorch 中使用预训练的 Mask R-CNN 模型。 1. 语义分割、目标检测和实例分割 在之前的博客文章里介绍了语义分割和目标检测(如果感兴趣可以参…

【golang】调度系列之P

调度系列 调度系列之goroutine 调度系列之m 在前面两篇中,分别介绍了G和M,当然介绍的不够全面(在写后面的文章时我也在不断地完善前面的文章,后面可能也会有更加汇总的文章来统筹介绍GMP)。但是,抛开技术细…

华为云云耀云服务器L实例使用教学 | 访问控制-安全组配置规则 实例教学

文章目录 访问控制-安全组什么叫安全组安全组配置默认安全组配置安全组配置实例安全组创建安全组模板配置安全组模板:通用Web服务器 配置安全组规则安全组配置规则功能介绍修改允许特定IP地址访问Web 80端口服务建立仅允许访问特定目的地址的安全规则配置网络ACL对实…

开源数字孪生基础设施

开源数字孪生基础设施 开源数字基础设施 开源数字基础设施 开源软件是基础设施发展的一种模式,这是在2007年美国科学基金会发布的《认识基础设施:动力机制、冲突和设计》中得出的结论。在这份55页的报告中三次集中谈到了开源软件(Open Sourc…

1999-2018年地级市经济增长数据

1999-2018年地级市经济增长数据 1、时间:1999-2018年 2、指标: 行政区划代码、城市、年份、地区生产总值_当年价格_全市_万元、地区生产总值_当年价格_市辖区_万元、人均地区生产总值_全市_元、人均地区生产总值_市辖区_元、地区生产总值增长率_全市_…

MySQL使用C语言链接

MySQL使用C语言链接 MySQL connect接口介绍mysql_initmysql_real_connectmysql_querymysql_store_result\mysql_use_result()mysql_num_rowsmysql_num_fieldsmysql_fetch_fieldsmysql_fetch_rowmysql_close MySQL connect 使用C语言来连接数据库,本质上就是利用一些…

「聊设计模式」之命令模式(Command)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅! 前言 在面向对象设计中,设计模式是重要的一环。设计…

c:Bubble Sort

/*****************************************************************//*** \file SortAlgorithm.h* \brief 业务操作方法* VSCODE c11* \author geovindu,Geovin Du* \date 2023-09-19 ***********************************************************************/ #if…

前端知识以及组件学习总结

JS 常用方法 js中字符串常用方法总结_15种常见js字符串用法_<a href"#">leo</a>的博客-CSDN博客 <script>var str"heool"console.log(str.length);console.log(str.concat(" lyt"));console.log(str.includes("he&quo…