【AI学习从零至壹】Pytorch神经⽹络

Pytorch神经⽹络

神经网络简介

神经元

在深度学习中,必须要说的就是神经⽹络,或者说是⼈⼯神经⽹络(artificial neural network)。神经⽹络是⼀种⼈类受到⽣物神经细胞结构启发⽽研究出的算法体系。

神经⽹络这个名字容易让⼈觉得特别神秘,不像我们接触过的程序算法那样直观,在编程的时候我们常⽤到的都是⼀些加减乘除、循环、分⽀、⽐⼤⼩、读写等等,使⽤这些基本步骤就能够完成⼀个明确的⽬标任务,然⽽神经⽹络和这种直观的⽅式还真有些不同。

图 2 就是⼀个最简单的神经元,有⼀个输⼊,⼀个输出,中间是⼀个参数,然后节点表⽰进⾏某种运算,所以它表达的含义跟⼀个普通函数没什么区别。不过需要注意的是,我们⽬前使⽤的神经元内部的运算通常有两个部分组成,第⼀部分是所谓的"线性模型ˮ,可以把它理解为⼀


激活函数

那么解释⼀下什么是⾮线性,⽣活中的各种事物抽象为数学模型后⼏乎都是⾮线性,举个例

⼦,理想情况下房⼦越⼤,价格越贵,这⾥的⾯积与价格可以视作线性关系,但是真实情况

下,房价不仅受到⾯积的影响因素,还会受到地理位置、时间、楼层等等因素的影响,那么这⼏种因素与房价就不是线性关系了。通常神经元的串联和并联叠加构成了神经⽹络,如果都是线性模型的叠加,那最终整个⽹络也是线性的,也就是矩阵相乘的关系,但是其中加⼊了激活函数,那么叠加之后的神经⽹络理论上就可以构成任意复杂的函数从⽽解决⼀些复杂问题。下⾯我们给出神经⽹络中常⽤到的三种激活函数:

神经网络

神经元⾸尾相接形成⼀个类似⽹络的结构来协同计算,这个算法体系被称为神经⽹络。

神经元就是通过这种结构进⾏数据传递,数据经过前⼀个神经元的计算输出给下⼀层的神经元当做输⼊,因为前⼀层的神经元节点连接了下⼀层的所有节点,因此这种前后层相互连接的⽹络也叫作全连接神经⽹络,这是⼀种⾮常常⻅的⽹络结构。

神经⽹络的⼯作过程

前向传播(forward)

在前⾯的学习中,我们介绍了神经⽹络的基本结构,还有神经元的计算⽅式,本节开始我们继续深⼊讲解神经⽹络的⼯作过程。在前⾯我们接触过了⼀种简单的神经⽹络结构,叫做全连接神经⽹络,同时,这种神经元从输⼊层开始,接受前⼀级输⼊,并输出到后⼀级,直⾄最终输出层,由于数据是⼀层⼀层从输⼊⾄输出传播的,也叫作前馈神经⽹络。




反向传播(backward)

现在我们来讲⼀下反向传播,顾名思义,反向传播算法是利⽤损失函数进⽽从输出到输⼊⽅向传播达到调整参数的⽬的,它的存在主要是解决深层(多个隐藏层)神经⽹络的参数更新问题,反向传播算法就是梯度下降应⽤了链式法则,梯度下降这⼀概念我们下⼀⼩节会讲到,链式法则是微积分中的求导法则,⽤于复合函数的求导,在神经⽹络中只要有了隐藏层,那么隐藏层的权重参数与损失函数会构成复合函数,因此使⽤链式法则解决复合函数求导问题达到调整权重参数的⽬的。

上图中,左侧是原来我们搭建的神经⽹络,右侧是将输⼊赋值 0.10 与 0.20,隐藏层权重为

0.05、0.15、0.10、0.20,偏置为 0.35,输出层权重为 0.25、0.35、0.30、0.40,偏置为 0.50,最终赋值输出为 0.85、0.30,注意这个输出是我们预设好的标签,就是我们希望输⼊ 0.10 与 0.20 后,通过神经⽹络计算,最终输出 0.85 与 0.30。 通过上⼀节的前向传播,我们得到了前向传播中各个节点的计算公式,将实数带⼊公式我们可以得到:













训练神经⽹络


Pytorch搭建并训练神经⽹络

神经⽹络构建和训练过程

数据预处理

复制代码
#导入必要包
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision.datasets import FashionMNIST
from torchvision.transforms.v2 import ToTensor #转换图像数据为张量 
from torch.utils.data import DataLoader#数据加载器


构建模型

复制代码
# 所有结构串联
model = nn.Sequential(
    nn.Linear(784,64),
    nn.Sigmoid(),
    nn.Linear(64,10)

优化器&提取训练数据

复制代码
loss_fn = nn.CrossEntropyLoss()#交叉熵损失函数
#优化器(模型参数更新)
optimizer = torch.optim.SGD(model.parameters(),lr = 0.01)
for epoch in range(epochs):
    for data,target in train_dl:
        #提取训练数据
        #前向运算
        output = model(data.reshape(-1,784))
        #计算损失
        loss = loss_fn(output, target)
        #反向传播
        optimizer.zero_grad()#所有参数梯度清零
        loss.backward() #计算梯度(参数.grad)
        optimizer.step() #更新参数
    print(f'loss:{loss.item()}')

训练样本

复制代码
test_dl=DataLoader(test_data,batch_size=BATCH_SIZE,shuffle=True)#shuffle=True表示打乱数据
correct = 0
total = 0
with torch.no_grad(): #不计算梯度
    for data, target in test_dl:
        output = model(data.reshape(-1,784))
        _,predicted = torch.max(output, 1)#返回每行最大值和索引
        total += target.size(0)
        correct += (predicted == target).sum().item()
print(f'Accuracy:{correct/total*100}%') 
相关推荐
强哥之神1 分钟前
微软 AI 发布 LongRoPE2:近乎无损地将大型语言模型上下文窗口扩展至 128K 标记,保持 97% 短上下文准确性
人工智能·语言模型·自然语言处理·大模型·智能体·ai代理
闲人编程17 分钟前
图像分类:CIFAR10/ImageNet实战
pytorch·深度学习·图像识别
白云千载尽18 分钟前
LMDrive大语言模型加持的自动驾驶闭环系统 原理与复现过程记录
人工智能·经验分享·python·算法·机器学习·语言模型·自动驾驶
Jozky8623 分钟前
自动驾驶中基于潜在世界模型学习多概率决策(LatentDriver)
人工智能·学习·自动驾驶
公谨24 分钟前
MasterGo AI 生成设计图及代码
前端·人工智能
量子位25 分钟前
o1/o3 后训练负责人离职创业,奥特曼把 OpenAI 玩成另一个 YC 孵化器了
人工智能·openai
量子位25 分钟前
陶哲轩:o3-mini 纠正了我一个数学错误,十分钟解决原本一小时才能完成的题目
人工智能·llm
szxinmai主板定制专家31 分钟前
轨道交通CPU+FPGA控制器,支持codesys/vxWorks/翼辉等实时系统
arm开发·人工智能·fpga开发·架构
机器之心34 分钟前
单个4090就能跑,Mistral开源多模态小模型,开发者:用来构建推理模型足够香
人工智能
数智大号37 分钟前
XGPT x DeepSeek:微步AI安全助手满血升级
人工智能·安全