动手学深度学习(一)简介+预备知识+基础知识(上)

news2024/9/19 13:49:55

一、简介

1、机器学习

机器学习研究如何使用经验改善计算机系统的性能。

2、表征学习

表征学习是机器学习的一类,研究的是,如何自动学习出数据合适的表示方式,更好地由输入得到正确的输出。

3、深度学习

深度学习是具有多级表示的表征学习,逐级表示越来越抽象的概念或模式。

二、预备知识

1、张量基本操作

  • 手动设置一个torch种子:使用不同模型进行预测,手动设置种子可以保证每次随机初始化参数和批次顺序是相同的,保证了实验的可重复性。
  • 创建张量:若干种。
  • 张量加法:逐个元素相加。
  • 张量形状:shape和size()。
  • 张量塑形:view。
  • 张量内存
  • 张量广播机制:如果两个张量在某一维度的大小相同,或其中一个的该维度大小为 1,则这两个维度是兼容的。

2、自动求梯度

如果将Tensor的属性.requires_grad设置为True,它将开始追踪(track)在其上的所有操作。完成计算后,可以调用.backward()来完成所有梯度计算。此Tensor的梯度将累积到.grad属性中。

注意在调用.backward()时,如果Tensor是标量,则不需要为backward()指定任何参数;否则,需要指定一个求导变量。

如果不想要被继续追踪,可以调用.detach()将其从追踪记录中分离出来,这样就可以防止将来的计算被追踪。此外,还可以用with torch.no_grad()将不想被追踪的操作代码块包裹起来,这种方法在评估模型的时候很常用,因为在评估模型时,我们并不需要计算可训练参数(requires_grad=True)的梯度。

Function是另外一个很重要的类。TensorFunction互相结合就可以构建一个记录有整个计算过程的非循环图。每个Tensor都有一个.grad_fn属性,该属性即创建该TensorFunction(除非用户创建的Tensors时设置了grad_fn=None)。

三、基础

1、线性回归

①线性回归vs分类问题

线性回归的输出是连续值,分类问题的输出是离散值。

②线性回归几要素

(1)模型

线性回归假设输出与各个输入之间是线性关系。

w_1,w_2,b都是标量,分别是权重和偏置。

(2)线性回归模型训练
a.训练集

在机器学习术语里,用于模型训练的数据集被称为训练数据集(training data set)或训练集(training set),一栋房屋被称为一个样本(sample),其真实售出价格叫作标签(label),用来预测标签的两个因素叫作特征(feature)。特征用来表征样本的特点。

b.损失函数

在模型训练中,我们需要衡量价格预测值与真实值之间的误差。通常我们会选取一个非负数作为误差,且数值越小表示误差越小。

在机器学习里,将衡量误差的函数称为损失函数(loss function)。这里使用的平方误差函数也称为平方损失(square loss)

通常,我们用训练数据集中所有样本误差的平均来衡量模型预测的质量,即:

在模型训练中,我们希望找出一组模型参数来使训练样本平均损失最小。 

c.优化算法
  • 解析解和数值解:解析解是通过公式可求得的解,数值解适用于解析解难以或者无法解决的问题,是一个近似结果。
  • 小批量随机梯度下降:也被叫做SGD,随机采样一个小批次数据,前代获得损失,回代获得损失对模型参数的梯度,用梯度乘上一个步长(学习率)来更新当前参数。
  • 超参数:深度学习里面,模型训练之前人工设置的参数叫做超参数,比如说学习率和batch大小,调参主要调的是超参数。

③线性回归模型预测

用学习出来的线性回归模型进行预测。

④线性回归的表示方式

(1)神经网络表示

线性回归模型是一个单层神经网络,每个输出层的神经元与每个输入层的神经元都有连接,这样的输出层被称为全连接层(fully-connected layer)或稠密层(dense layer)

(2)矢量表示

线性回归模型:

损失函数:

梯度更新参数:

梯度:

2、线性回归从0开始实现

在训练中,我们将多次迭代模型参数。在每次迭代中,我们根据当前读取的小批量数据样本(特征X和标签y),通过调用反向函数backward计算小批量随机梯度,并调用优化算法sgd迭代模型参数。由于我们之前设批量大小batch_size为10,每个小批量的损失l的形状为(10, 1)。回忆一下“自动求梯度”一节。由于变量l并不是一个标量,运行l.backward()将对l中元素求和得到新的变量(求和得到总损失),再求该变量有关模型参数的梯度。

如果样本个数不能被批量大小整除,data_iter函数的行为会有什么变化:一般会默认dropout。

3、线性回归的简洁实现

①导入数据

DataLoader:封装数据,批量加载数据,可以打散和多线程读入。

dataset = Data.TensorDataset(features, labels)
# 把 dataset 放入 DataLoader
data_iter = Data.DataLoader(
    dataset=dataset,      # torch TensorDataset format
    batch_size=batch_size,      # mini batch size
    shuffle=True,               # 要不要打乱数据 (打乱比较好)
    num_workers=2,              # 多线程来读数据
)

②定义模型

nn模块:“nn”是neural networks(神经网络)的缩写。顾名思义,该模块定义了大量神经网络的层。

Sequential实例:可以看作是一个串联各个层的容器。在构造模型时,我们在该容器中依次添加层。当给定输入数据时,容器中的每一层将依次计算并将输出作为下一层的输入。

net = nn.Sequential()

三种串联方法:

  • 直接在nn.Sequential()内定义:
net = nn.Sequential(
    nn.Linear(num_inputs, 1)
    # 此处还可以传入其他层
    )
  • 创建实例后add_module:
net = nn.Sequential()
net.add_module('linear', nn.Linear(num_inputs, 1))
  • OrderDict创建多个:每层有名字
from collections import OrderedDict
net = nn.Sequential(OrderedDict([
          ('linear', nn.Linear(num_inputs, 1))
          # ......
        ]))

③初始化模型参数

init模块:该模块提供了模型参数初始化的各种方法。这里的initinitializer的缩写形式。

from torch.nn import init

init.normal_(net[0].weight, mean=0.0, std=0.01)
init.constant_(net[0].bias, val=0.0)  # 也可以直接修改bias的data: net[0].bias.data.fill_(0)

④定义损失函数

nn里面有很多Loss。

loss = nn.MSELoss()

⑤定义优化算法

torch.optim模块PyTorch的优化器模块,允许你使用不同的优化算法。

import torch.optim as optim
optimizer = optim.SGD(net.parameters(), lr=0.03)
print(optimizer)

⑥全套训练

num_epochs = 3
for epoch in range(1, num_epochs + 1):
    for X, y in data_iter:
        output = net(X)
        l = loss(output, y.view(-1, 1))
        optimizer.zero_grad() # 梯度清零,等价于net.zero_grad()
        l.backward()
        optimizer.step()
    print('epoch %d, loss: %f' % (epoch, l.item()))

4、softmax回归

softmax回归的输出单元从一个变成了多个,且引入了softmax运算使输出更适合离散值的预测和训练。

①softmax表示

也是单层神经网络,但是输出有多个,输出个数等于分类问题中的类别个数。

②softmax运算

(1)解决的问题:

softmax运算将输出变换成一个合法的类别预测分布。

  • 模型输出的值范围不统一、不确定。
  • 真实标签是离散值,模型输出值范围不确定,误差也难以衡量。
(2)公式

它通过下式将输出值变换成值为正且和为1的概率分布:

softmax运算不改变预测类别输出。

softmax回归对样本i分类的矢量计算表达式为:

小批量样本分类的矢量计算表达式:

③交叉熵损失函数

交叉熵(cross entropy)是一个常用的衡量方法,来衡量两个概率分布差异。交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。(因为用one-hot编码,y_i向量中只有一个真实类别索引位置为1,其余都为0,因此交叉熵最后得到的就是真实标签所在类预测概率的对数的相反数。)

假设训练数据集的样本数为nn,交叉熵损失函数定义为

5、softmax回归的简洁实现

在神经网络中,FlattenLayer是一个非常常见且有用的层,其主要功能是将多维的输入张量“展平”成一维的张量。这通常在从卷积层向全连接层过渡时使用,因为全连接层需要接收一维的输入数据。

比如说,x = torch.randn(10, 3, 28, 28),批次大小是10,通道数是3,图像大小是28*28。展平以后就变成了10*(3*28*28)

class FlattenLayer(nn.Module):
    def __init__(self):
        super(FlattenLayer, self).__init__()
    def forward(self, x): # x shape: (batch, *, *, ...)
        return x.view(x.shape[0], -1)

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

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

相关文章

SpringCloud微服务详细笔记(一):微服务介绍--微服务拆分--RestTemplate远程调用--Nacos注册中心

目录 1.认识微服务 1.1单体架构 1.2微服务 1.3SpringCloud 2.微服务拆分 2.1服务拆分原则 2.1.1什么时候拆? 2.1.2怎么拆? 2.2微服务项目结构: 2.3服务拆分示例: 2.4远程调用 2.4.1RestTemplate 2.4.2远程调用示例 …

Qt篇——Qt使用C++获取Windows电脑上所有外接设备的名称、物理端口位置等信息

我之前有发过一篇文章《Qt篇——获取Windows系统上插入的串口设备的物理序号》,文章中主要获取的是插入的USB串口设备的物理序号;而本篇文章则进行拓展,可以获取所有外接设备的相关信息(比如USB摄像头、USB蓝牙、USB网卡、其它一些…

前端转鸿蒙好做吗

在科技不断发展的当下,许多前端开发者可能会思考一个问题:前端转鸿蒙好做吗? 一、前端与鸿蒙开发的差异 1. 技术栈的变化 前端开发主要涉及 HTML、CSS、JavaScript 等技术,而鸿蒙开发则需要掌握 Java、Kotlin、JavaScript 等语言&#xff0c…

远程存储 RDMA

什么是 RDMA RDMA(Remote Direct Memory Access)指的是远程直接内存访问,这是一种通过网络在两个应用程序之间搬运缓冲区里的数据的方法。 Remote:数据通过网络与远程机器间进行数据传输。 Direct:没有内核的参与&am…

计算机毕业设计 | 基于SpringBoot的健身房管理系统(附源码)

1,项目背景 随着人们生活水平的提高和健康意识的增强,越来越多的人开始关注自己的身体健康并加入到健身行列中。然而,传统的健身房管理方式往往存在诸多问题,如会员信息管理混乱、课程安排不合理、教练资源分配不均等&#xff0c…

MaxCompute基础概论

1. 简介与背景 随着大数据技术的发展,企业和组织面临着处理海量数据的挑战。传统的数据存储和处理工具难以应对高并发、复杂计算以及海量数据的快速增长需求。为了解决这些问题,阿里云推出了 MaxCompute(原名 ODPS),这…

超声波雪深监测站

超声波雪深监测站是一种用于测量和监测雪深的设备。它的功能和作用主要包括以下几个方面: 雪深测量:超声波雪深监测站能够通过发射超声波并接收回波的方式,测量雪地表面到地面之间的距离,从而得到雪深的数据。通过分析和处理这些数…

图像去噪的艺术:自适应中值滤波器的应用与实践

在数字图像处理的众多挑战中,噪声的去除是一个永恒的话题。特别是椒盐噪声,因其随机将像素点变为极黑或极白,对图像的视觉质量破坏极大。本文将通过MATLAB实现的自适应中值滤波器(AMF),探讨其在图像去噪中的…

--- 数据结构 二叉树 --- java

树形结构 数使一个非线性结构,他是由n个结点组成的具有一定层次关系的集合,叫做树是因为他像是一颗倒挂的树,根在上,叶子在下,具有一些性质 1,有一个特殊节点叫做根节点,他没有钱去节点&#x…

017_Python爬虫系列_防盗链代理

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

限流,流量整形算法

写在前面 本文看下流量整形相关算法。 目前流量整形算法主要有三种,计数器,漏桶,令牌桶。分别看下咯! 1:计数器 1.1:描述 单位时间内只允许指定数量的请求,如果是时间区间内超过指定数量&a…

用Python实现时间序列模型实战——Day 17: 时间序列模型的评估方法

一、学习内容 1. 预测误差的评估指标 在时间序列预测中,常用的评估指标包括 MAE (Mean Absolute Error), MSE (Mean Squared Error) 和 RMSE (Root Mean Squared Error)。这些指标用于衡量模型的预测误差。 MAE (Mean Absolute Error): MAE 衡量预测值…

mysql学习教程,从入门到精通,MySQL WHERE 子句(10)

1、SQL WHERE 子句 在本教程中,您将学习如何使用SQL从表中选择特定记录。 根据条件选择记录 在上一章中,我们学习了如何从表或表列中获取所有记录。但是,在现实世界中,我们通常只需要选择,更新或删除满足某些条件的那…

HarmonyOS---应用测试概述

一、应用质量要求 应用质量要求分为应用体验质量建议和应用内容合规要求两大部分。 1、应用体验质量建议 功能数据完备、基础体验要求、HarmonyOS特征增强体验要求。 (1)功能数据完备 (2)基础体验要求 (3)增…

盘古信息IMS 驱动智能工厂建设,助力制造企业降本增效

随着全球化的加剧和市场竞争的日益激烈,制造业面临着提高生产效率、降低成本、提升产品质量以及实现绿色可持续发展等多重压力。智能工厂是利用人工智能、大数据、物联网、云计算等新技术,实现工厂的智能化、自动化、可持续化发展的新型制造业模式&#…

《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现

目录 一、图像直方图 1、什么是图像直方图 2、作用 1)分析图像的亮度分布 2)判断图像的对比度 3)检测图像的亮度和色彩偏移 4)图像增强和调整 5)阈值分割 3、举例 二、直方图用法 1、函数用法 2、参数解析…

芋道快速开发平台的使用心得

1.前端版本 项目的管理后台有 4 个版本: yudao-ui-admin-vue3 (opens new window):基于 Vue3 element-plus yudao-ui-admin-vben (opens new window):基于 Vue3 vben(ant-design-vue) yudao-ui-admin-vue2 (opens new window)&#xff…

LaTeX中制作表格【表格数据自动换行】(附latex源码)

一、latex软件推荐 在使用LaTeX进行文档编写时,有几款非常受欢迎且功能强大的软件和在线编辑器可供选择。以下是一些推荐的LaTeX软件: 1. Overleaf(强烈推荐) Your Projects - Overleaf, Online LaTeX Editorhttps://www.overleaf.com/project 2.Tex…

图新说【消防】(一步步的做好态势标绘)

0.序 越来越多的消防战士使用图新说来做消防预案,态势标绘比武等。 图新说即可应用于具体的消防救援任务,制作具体的作战方案,让战士的配合更加紧密。 也可以做大型的消防预案,针对辖区内的重点建筑、危化存储区提前做应急救援方…

最新版MYMPay码支付开源版系统源码_个人免签支付_聚合支付系统

最新版MYMPay码支付开源版系统源码_个人免签支付_聚合支付系统 安装环境: PHP:7.0-8.2 (推荐使用7.4) 需要安装Xload 扩展 MySQL:5.6版本 访问 http://你的域名/install 进行安装 后台地址:http://你的域名/Admin/ 账号&am…