没有域名怎么访问网站,个人做健康网站好吗,网易云wordpress代码,想象力网站建设公司欢迎来到《pytorch深度学习教程》系列的第五篇#xff01;在前面的四篇中#xff0c;我们已经介绍了Python、numpy及pytorch的基本使用#xff0c;并在上一个教程中介绍了梯度。今天#xff0c;我们将探索神经网络#xff0c;对于神经网络进行概述并进行简单的实践学习
欢…欢迎来到《pytorch深度学习教程》系列的第五篇在前面的四篇中我们已经介绍了Python、numpy及pytorch的基本使用并在上一个教程中介绍了梯度。今天我们将探索神经网络对于神经网络进行概述并进行简单的实践学习
欢迎订阅专栏
深度学习保姆教程_tRNA做科研的博客-CSDN博客
神经网络是受人类大脑启发的计算模型旨在识别数据中的模式。它们是深度学习的核心推动了各个领域的突破。 目录
1.生物学启示
(1)大脑作为模型
(2)深度学习中的生物学原理
2.生物启发式AI的未来
(1)应用生物学启示从理论到实践
3.人工神经元
(1)人工神经元的结构
(2)神经元的计算
(3)数学表达式总结
(4)常见的激活函数
(5)神经元在神经网络中的作用
(6)常见神经网络
4.建立第一个神经网络前馈神经网络
(1)前馈神经网络的结构
(2)前馈神经网络的工作原理
(3)训练前馈神经网络
(4)你的第一个神经网络训练
训练过程 5.结语 1.生物学启示
几个世纪以来自然界一直是科学家和工程师宝贵的灵感来源。人工智能领域特别是深度学习也不例外。通过研究生物系统研究人员开发了模仿大脑处理信息方式的创新算法和架构。
(1)大脑作为模型
人脑是一个复杂的、相互连接的神经元网络。这种复杂结构启发了人工神经网络的发展。
神经元大脑的基本构建块负责处理和传输信息。突触神经元之间的连接促进通信。神经网络受大脑结构启发人工神经网络由相互连接的节点神经元组成用于处理信息。
(2)深度学习中的生物学原理
学习大脑通过经验学习调整突触连接。深度学习模型通过反向传播从数据中学习。层次性大脑以层次化的方式处理信息。深度神经网络也采用层次化的表示方法。特征提取大脑从感官输入中提取特征。卷积神经网络在图像特征提取方面表现出色。适应性大脑适应新信息和环境。深度学习模型可以针对特定任务进行微调。 2.生物启发式AI的未来
神经科学和人工智能的交叉领域具有巨大的潜力。通过继续探索大脑的机制我们可以开发出更强大和更智能的AI系统。
(1)应用生物学启示从理论到实践
了解神经网络的生物学基础是重要的但其真正的力量在于实际应用。让我们探讨如何利用这些概念来构建现实世界的系统。
卷积神经网络CNNs视觉皮层的对应物
图像识别训练一个CNN将图像分类为不同的类别例如猫与狗。目标检测检测并定位图像中的对象。图像分割图像的像素级分类。
循环神经网络RNNs处理顺序数据
自然语言处理构建用于文本分类、情感分析和语言翻译的模型。时间序列分析基于过去的数据预测未来的值。语音识别将音频信号转换为文本。
长短期记忆LSTM网络捕捉长期依赖关系
自然语言处理处理复杂的语言模式和长期依赖关系。时间序列预测基于长期模式预测未来的值。机器翻译将一种语言的文本翻译成另一种语言。 3.人工神经元
人工神经元是神经网络的基本计算单元。受其生物对应物的启发这些数学函数处理输入数据应用变换并产生输出。
(1)人工神经元的结构
一个人工神经元由几个组件组成
输入输入神经元的数据。权重分配给每个输入的数值表示该输入的重要性。偏置加到输入加权和上的常数值。激活函数应用于神经元输出的非线性函数。
(2)神经元的计算
神经元的输出分两步计算
加权和将每个输入乘以其对应的权重对结果求和并加上偏置。激活将激活函数应用于加权和的结果。
我们给一个通俗的解释
import numpy as np
import matplotlib.pyplot as pltdef sigmoid(x):return 1 / (1 np.exp(-x))# 示例神经元
inputs [1, 2, 3]
weights [0.2, 0.3, 0.4]
bias 0.1# 计算加权和
weighted_sum np.dot(inputs, weights) bias# 应用激活函数
output sigmoid(weighted_sum)# 绘制 Sigmoid 函数
x np.linspace(-10, 10, 100)
y sigmoid(x)plt.figure(figsize(8, 4))
plt.plot(x, y, labelSigmoid Function)
plt.scatter([weighted_sum], [output], colorred, labelfOutput ({output:.2f}))
plt.axvline(xweighted_sum, colorgray, linestyle--, labelfWeighted Sum ({weighted_sum:.2f}))
plt.xlabel(x)
plt.ylabel(Sigmoid(x))
plt.title(Sigmoid)
plt.legend()
plt.grid(True)
plt.show() 然后我们详细看看发生了什么这是什么
-1输入与权重
输入inputs [1, 2, 3] 表示神经元接收到三个输入值。权重weights [0.2, 0.3, 0.4] 表示每个输入对应的权重。 -2计算加权和
点积运算np.dot(inputs, weights) 计算输入向量与权重向量的点积即 1×0.22×0.33×0.41×0.22×0.33×0.4。具体计算1×0.20.2, 2×0.30.6, 3×0.41.2点积结果0.20.61.22.0加上偏置bias 0.1所以加权和为 2.00.12.1。 -3应用激活函数 (3)数学表达式总结
整个神经元的计算过程可以用以下数学表达式表示 (4)常见的激活函数
Sigmoid输出介于0和1之间的值。ReLU修正线性单元输出输入与0的最大值。Tanh输出介于-1和1之间的值。Softmax用于分类任务输出每个类别的概率。
(5)神经元在神经网络中的作用
神经元在神经网络中按层组织
输入层接收输入数据。隐藏层通过多层神经元处理信息。输出层产生最终输出。
注意事项
梯度消失问题可能出现在深层网络中使训练变得困难。过拟合模型可能变得过于复杂在新数据上的表现不佳。计算成本训练大型神经网络可能需要大量的计算资源。
(6)常见神经网络
1.前馈神经网络
在前馈神经网络中信息单向流动从输入层流向输出层没有循环或周期。
全连接层一层中的每个神经元都连接到下一层中的每个神经元。激活函数应用于每个神经元的输出以引入非线性。
2.深度神经网络
深度神经网络具有多个隐藏层允许它们学习复杂的模式。
深度隐藏层的数量。宽度每层中神经元的数量。
3.循环神经网络RNNs
RNNs在相同层的神经元之间引入连接形成周期。这使得它们能够处理序列数据。
梯度消失问题RNNs在处理长期依赖时可能会遇到困难。LSTM和GRU解决梯度消失问题的RNN变体。
4.卷积神经网络CNNs
CNNs专为处理网格状数据如图像而设计。
卷积层应用滤波器以从输入数据中提取特征。池化层降低维度同时保留重要信息。
挑战和注意事项
过拟合神经网络容易过拟合需要正则化技术。超参数调整找到最佳超参数对于性能至关重要。
4.建立第一个神经网络前馈神经网络
前馈神经网络FNNs是最简单的人工神经网络类型。信息单向流动从输入到输出不形成循环。它们是理解更复杂架构的基础。
(1)前馈神经网络的结构
一个典型的FNN由以下部分组成
输入层从外部世界接收数据。隐藏层通过多层神经元处理信息。输出层产生最终结果。
一层中的神经元与下一层中的每个神经元相连形成全连接网络。
(2)前馈神经网络的工作原理
输入数据被输入到输入层。传播信息通过隐藏层传递每个神经元应用其激活函数。输出最终层产生输出可以是分类、回归或其他所需的结果。
(3)训练前馈神经网络
反向传播一种基于预测输出与实际输出之间的误差来调整权重和偏置的算法。损失函数衡量预测值与实际值之间的差异。优化器更新网络的参数以最小化损失函数。
(4)你的第一个神经网络训练
我们用一个简单的二分类神经网络的例子进行学习
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
import numpy as np# 设置随机种子以确保结果可复现
torch.manual_seed(42)# 生成一些简单的二维数据用于分类
def generate_data(num_samples100):# 生成两个类别的数据每个类别50个样本data []labels []for i in range(num_samples // 2):# 第一类左下角data.append([np.random.rand() * 0.6 - 0.3, np.random.rand() * 0.6 - 0.3])labels.append(0)# 第二类右上角data.append([np.random.rand() * 0.6 0.2, np.random.rand() * 0.6 0.2])labels.append(1)return torch.tensor(data, dtypetorch.float32), torch.tensor(labels, dtypetorch.long)# 定义一个简单的前馈神经网络
class SimpleFFNN(nn.Module):def __init__(self):super(SimpleFFNN, self).__init__()# 输入层到隐藏层输入特征为2隐藏单元为10self.fc1 nn.Linear(2, 10)# 隐藏层到输出层输出类别为2self.fc2 nn.Linear(10, 2)def forward(self, x):# 使用ReLU激活函数x torch.relu(self.fc1(x))# 输出层不使用激活函数因为后续会使用交叉熵损失函数x self.fc2(x)return x# 初始化模型、损失函数和优化器
model SimpleFFNN()
criterion nn.CrossEntropyLoss()
optimizer optim.SGD(model.parameters(), lr0.1)# 生成数据
X, y generate_data()# 训练模型
num_epochs 100
losses []for epoch in range(num_epochs):optimizer.zero_grad() # 清零梯度outputs model(X) # 前向传播loss criterion(outputs, y) # 计算损失loss.backward() # 反向传播optimizer.step() # 更新参数losses.append(loss.item())if (epoch1) % 10 0:print(fEpoch [{epoch1}/{num_epochs}], Loss: {loss.item():.4f})# 绘制损失曲线
plt.figure(figsize(8, 4))
plt.plot(range(1, num_epochs 1), losses, labelTraining Loss)
plt.xlabel(Epoch)
plt.ylabel(Loss)
plt.title(Training Loss Over Epochs)
plt.legend()
plt.show()# 可视化分类结果
def plot_decision_boundary(model, X, y):# 创建网格h 0.02x_min, x_max X[:, 0].min() - 1, X[:, 0].max() 1y_min, y_max X[:, 1].min() - 1, X[:, 1].max() 1xx, yy np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))grid torch.tensor(np.c_[xx.ravel(), yy.ravel()], dtypetorch.float32)with torch.no_grad():Z model(grid)Z torch.argmax(Z, dim1).reshape(xx.shape)plt.contourf(xx, yy, Z, alpha0.3, cmapplt.cm.Paired)plt.scatter(X[:, 0], X[:, 1], cy, cmapplt.cm.Paired, edgecolorsk)# 绘制决策边界
plt.figure(figsize(8, 6))
plot_decision_boundary(model, X.numpy(), y.numpy())
plt.xlabel(Feature 1)
plt.ylabel(Feature 2)
plt.title(Decision Boundary)
plt.show() 那么这个神经网络做了什么事情呢我们来仔细剖析
网络结构 输入层接收二维特征数据每个样本有两个特征。 隐藏层包含10个神经元。使用ReLU激活函数为网络引入非线性特性使其能够学习更复杂的模式。 输出层包含2个神经元对应两个类别。不使用激活函数因为后续使用了交叉熵损失函数它内部已经包含了softmax操作。
训练过程 数据生成生成了两类二维数据每类50个样本分别位于二维空间的左下角和右上角。 损失函数与优化器 使用交叉熵损失函数CrossEntropyLoss来衡量预测值与真实标签之间的差异。使用随机梯度下降SGD优化器学习率为0.1用于更新网络参数以最小化损失。 训练步骤 进行100个训练周期epochs。每个周期执行前向传播、计算损失、反向传播和参数更新。每10个周期打印一次当前的损失值以便监控训练进度。 5.结语
我们对于神经网络的基本结构和神经元都有了基本的认识也编写了我们第一个神经网络这是一个非常值得纪念的里程碑