上海营销型网站建设平台,思帽西宁网站建设,机关网站建设的请示,模板网代码目录
一、实验介绍 二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容
0. 导入必要的工具包
1. 构建数据集 2. 激活函数logistic
3. 线性层算子 Linear
4. 两层的前馈神经网络MLP
5. 模型训练 一、实验介绍
本实验实现了一个简单的两层前馈神经网络 激活函数…目录
一、实验介绍 二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容
0. 导入必要的工具包
1. 构建数据集 2. 激活函数logistic
3. 线性层算子 Linear
4. 两层的前馈神经网络MLP
5. 模型训练 一、实验介绍
本实验实现了一个简单的两层前馈神经网络 激活函数logistic线性层算子Linear 二、实验环境 本系列实验使用了PyTorch深度学习框架相关操作如下
1. 配置虚拟环境
conda create -n DL python3.7
conda activate DL
pip install torch1.8.1cu102 torchvision0.9.1cu102 torchaudio0.8.1 -f https://download.pytorch.org/whl/torch_stable.htmlconda install matplotlib conda install scikit-learn
2. 库版本介绍
软件包本实验版本目前最新版matplotlib3.5.33.8.0numpy1.21.61.26.0python3.7.16scikit-learn0.22.11.3.0torch1.8.1cu1022.0.1torchaudio0.8.12.0.2torchvision0.9.1cu1020.15.2 三、实验内容
ChatGPT 前馈神经网络Feedforward Neural Network是一种常见的人工神经网络模型也被称为多层感知器Multilayer PerceptronMLP。它是一种基于前向传播的模型主要用于解决分类和回归问题。 前馈神经网络由多个层组成包括输入层、隐藏层和输出层。它的名称前馈源于信号在网络中只能向前流动即从输入层经过隐藏层最终到达输出层没有反馈连接。 以下是前馈神经网络的一般工作原理 输入层接收原始数据或特征向量作为网络的输入每个输入被表示为网络的一个神经元。每个神经元将输入加权并通过激活函数进行转换产生一个输出信号。 隐藏层前馈神经网络可以包含一个或多个隐藏层每个隐藏层由多个神经元组成。隐藏层的神经元接收来自上一层的输入并将加权和经过激活函数转换后的信号传递给下一层。 输出层最后一个隐藏层的输出被传递到输出层输出层通常由一个或多个神经元组成。输出层的神经元根据要解决的问题类型分类或回归使用适当的激活函数如Sigmoid、Softmax等将最终结果输出。 前向传播信号从输入层通过隐藏层传递到输出层的过程称为前向传播。在前向传播过程中每个神经元将前一层的输出乘以相应的权重并将结果传递给下一层。这样的计算通过网络中的每一层逐层进行直到产生最终的输出。 损失函数和训练前馈神经网络的训练过程通常涉及定义一个损失函数用于衡量模型预测输出与真实标签之间的差异。常见的损失函数包括均方误差Mean Squared Error和交叉熵Cross-Entropy。通过使用反向传播算法Backpropagation和优化算法如梯度下降网络根据损失函数的梯度进行参数调整以最小化损失函数的值。 前馈神经网络的优点包括能够处理复杂的非线性关系适用于各种问题类型并且能够通过训练来自动学习特征表示。然而它也存在一些挑战如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战一些改进的网络结构和训练技术被提出如卷积神经网络Convolutional Neural Networks和循环神经网络Recurrent Neural Networks等。 本系列为实验内容对理论知识不进行详细阐释
咳咳其实是没时间整理待有缘之时回来填坑 0. 导入必要的工具包
import torch
from torch import nn 1. 构建数据集
input torch.ones((1, 10)) 创建了一个输入张量input大小为(1, 10)。 2. 激活函数logistic
def logistic(z):return 1.0 / (1.0 torch.exp(-z)) logistic函数的特点是将输入值映射到一个介于0和1之间的输出值可以看作是一种概率估计。当输入值趋近于正无穷大时输出值趋近于1当输入值趋近于负无穷大时输出值趋近于0。因此logistic函数常用于二分类问题将输出值解释为概率值可以用于预测样本属于某一类的概率。在神经网络中logistic函数的引入可以引入非线性特性使得网络能够学习更加复杂的模式和表示。 3. 线性层算子 Linear
class Linear(nn.Module):def __init__(self, input_size, output_size):super(Linear, self).__init__()self.params {}self.params[W] nn.Parameter(torch.randn(input_size, output_size, requires_gradTrue))self.params[b] nn.Parameter(torch.randn(1, output_size, requires_gradTrue))self.grads {}self.inputs Nonedef forward(self, inputs):self.inputs inputsoutputs torch.matmul(inputs, self.params[W]) self.params[b]return outputs
Linear类是一个自定义的线性层继承自nn.Module 它具有两个参数input_size和output_size分别表示输入和输出的大小。在初始化时创建了两个参数W和b分别代表权重和偏置都是可训练的张量并通过nn.Parameter进行封装。 params和grads是字典类型的属性用于存储参数和梯度inputs是一个临时变量用于存储输入。forward方法实现了前向传播的逻辑利用输入和参数计算输出。 4. 两层的前馈神经网络MLP
class MLP(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(MLP, self).__init__()self.fc1 Linear(input_size, hidden_size)self.fc2 Linear(hidden_size, output_size)def forward(self, x):z1 self.fc1(x)a1 logistic(z1)z2 self.fc2(a1)a2 logistic(z2)return a2
初始化时创建了两个线性层Linear对象fc1和fc2forward方法实现了整个神经网络的前向传播过程 输入x首先经过第一层线性层fc1然后通过logistic函数进行激活再经过第二层线性层fc2最后再经过一次logistic函数激活并返回最终的输出。 5. 模型训练
input_size, hidden_size, output_size 10, 5, 2
net MLP(input_size, hidden_size, output_size)
output net(input)
print(output)
定义了三个变量input_size、hidden_size和output_size分别表示输入大小、隐藏层大小和输出大小。创建了一个MLP对象net并将输入input传入模型进行前向计算得到输出output。最后将输出打印出来。 6. 代码整合
# 导入必要的工具包
import torch
from torch import nn# 线性层算子请一定注意继承自 nn. Module, 这会帮你解决许多细节上的问题
class Linear(nn.Module):def __init__(self, input_size, output_size):super(Linear, self).__init__()self.params {}self.params[W] nn.Parameter(torch.randn(input_size, output_size, requires_gradTrue))self.params[b] nn.Parameter(torch.randn(1, output_size, requires_gradTrue))self.grads {}self.inputs Nonedef forward(self, inputs):self.inputs inputsoutputs torch.matmul(inputs, self.params[W]) self.params[b]return outputs# 实现一个两层的前馈神经网络
class MLP(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(MLP, self).__init__()self.fc1 Linear(input_size, hidden_size)self.fc2 Linear(hidden_size, output_size)def forward(self, x):z1 self.fc1(x)a1 logistic(z1)z2 self.fc2(a1)a2 logistic(z2)return a2# Logistic 函数
def logistic(z):return 1.0 / (1.0 torch.exp(-z))input torch.ones((1, 10))
input_size, hidden_size, output_size 10, 5, 2
net MLP(input_size, hidden_size, output_size)
output net(input)
print(output)