【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}%') 
相关推荐
Love__Tay1 分钟前
【学习笔记】Python金融基础
开发语言·笔记·python·学习·金融
Grassto2 分钟前
Cursor Rules 使用
人工智能
MYH5167 分钟前
深度学习在非线性场景中的核心应用领域及向量/张量数据处理案例,结合工业、金融等领域的实际落地场景分析
人工智能·深度学习
Lilith的AI学习日记14 分钟前
什么是预训练?深入解读大模型AI的“高考集训”
开发语言·人工智能·深度学习·神经网络·机器学习·ai编程
聚客AI42 分钟前
PyTorch玩转CNN:卷积操作可视化+五大经典网络复现+分类项目
人工智能·pytorch·神经网络
程序员岳焱1 小时前
深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?
java·人工智能·后端
柠檬味拥抱1 小时前
AI智能体在金融决策系统中的自主学习与行为建模方法探讨
人工智能
智驱力人工智能1 小时前
智慧零售管理中的客流统计与属性分析
人工智能·算法·边缘计算·零售·智慧零售·聚众识别·人员计数
我的golang之路果然有问题1 小时前
云服务器部署Gin+gorm 项目 demo
运维·服务器·后端·学习·golang·gin
workflower1 小时前
以光量子为例,详解量子获取方式
数据仓库·人工智能·软件工程·需求分析·量子计算·软件需求