动手学深度学习(一)简介+预备知识+基础知识(上)
一、简介
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
是另外一个很重要的类。Tensor
和Function
互相结合就可以构建一个记录有整个计算过程的非循环图。每个Tensor
都有一个.grad_fn
属性,该属性即创建该Tensor
的Function
(除非用户创建的Tensor
s时设置了grad_fn=None
)。
三、基础
1、线性回归
①线性回归vs分类问题
线性回归的输出是连续值,分类问题的输出是离散值。
②线性回归几要素
(1)模型
线性回归假设输出与各个输入之间是线性关系。
都是标量,分别是权重和偏置。
(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 formatbatch_size=batch_size, # mini batch sizeshuffle=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
模块:该模块提供了模型参数初始化的各种方法。这里的init
是initializer
的缩写形式。
from torch.nn import initinit.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)
相关文章:

动手学深度学习(一)简介+预备知识+基础知识(上)
一、简介 1、机器学习 机器学习研究如何使用经验改善计算机系统的性能。 2、表征学习 表征学习是机器学习的一类,研究的是,如何自动学习出数据合适的表示方式,更好地由输入得到正确的输出。 3、深度学习 深度学习是具有多级表示的表征学…...

dubbo 服务消费原理分析之应用级服务发现
文章目录 前言一、MigrationRuleListener1、迁移状态模型2、Provider 端升级3、Consumer 端升级4、服务消费选址5、MigrationRuleListener.onRefer6、MigrationRuleHandler.doMigrate6、MigrationRuleHandler.refreshInvoker7、MigrationClusterInvoker.migrateToApplicationFi…...
QT如何在对话框中插入表格
在Qt中,如果你想要在对话框中插入表格,通常会使用QTableWidget或QTableView结合QStandardItemModel(对于QTableView)或直接在QTableWidget中操作。这里,我将介绍如何使用QTableWidget在对话框中插入表格,因…...

如何使用SSHFS通过SSH挂载远程文件系统?
SHFS(SSH 文件系统)是一款功能强大的工具,它允许用户通过 SSH 挂载远程文件系统,从而提供一种安全便捷的方式来访问远程文件,就像访问本地文件一样。本文将引导您完成使用 SSHFS 挂载远程文件系统的过程,为…...
SEELE 框架是
SEELE 框架是一个相对新颖的组织管理和优化框架,旨在帮助团队或企业更好地实现目标。它的核心思想是通过科学的管理方法来提升组织的执行力和决策能力。以下是对 SEELE 框架的详细讲解,包括定义、内容、实施步骤、实施策略以及推荐的实践方法和工具。 一…...
高教社杯数模竞赛特辑论文篇-2013年B题:碎纸复原模型与算法(续)(附MATLAB代码实现)
目录 4.3 三维碎纸复原模型 4.3.1 三维模型的降维 4.3.2 三维碎纸复原算法 4.3.3 模型求解 五、模型改进与推广 5.1 模型优点 5.2 模型缺点 5.3 模型改进 5.3.1 适用彩色图片的改进 5.3.2 最小干预度算法 5.4 模型推广 参考文献 代码实现 模拟退火法代码 GUI 程序代码 层次特征…...
Java操作Miscrosoft Office各类文件格式的开源免费工具库
Aspose.Words库 是一个商业Java库,还封装了常用的word、pdf、防伪码、水印等诸多功能。Apache 库需要注意的前置问题 问题1:Word的两个格式doc和docx,POI并没有提供统一的处理类。分别用 HWPFDocument 处理doc文档,用 XWPFTempl…...
Redis 缓存淘汰算法策略详解
引言 Redis 作为一款高性能的内存数据库,在处理大量数据时,由于内存有限,需要在数据达到设定的内存上限后,使用缓存淘汰策略来决定哪些数据应该被移除,以腾出空间存储新的数据。这一过程被称为缓存淘汰,通…...
Kubernetes PV生命周期的四个阶段
Kubernetes PV生命周期的四个阶段 1. Available(可用)2. Bound(已绑定)3. Released(已释放)4. Failed(失败)💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes中,PersistentVolume(PV)的生命周期主要包括以下四个阶段: 1. Available(可用) 状态:PV刚创建…...

Azure OpenAI models being unable to correctly identify model
题意:Azure OpenAI模型无法正确识别模型。 问题背景: In Azure OpenAI Studio, while I am able to deploy a GPT-4 instance, the responses are based solely on GPT-3.5 Turbo. I test the same prompts in my personal ChatGPT sub and it returns …...

项目小结二()
一.个人信息的界面 这里可以进行用户信息的修改,并渲染数据上去 二.这两天,出现的问题: 1.mybatis中 字段取别名 (还没验证,是否正确) 问题描述:由于实体类中的变量名,与数据库中…...

《论层次架构及其在软件系统中的应用》写作框架,软考高级系统架构设计师
论文真题 层次架构作为软件系统设计的一种基本模式,对于实现系统的模块化、可维护性和可扩展性具有至关重要的作用。在软件系统的构建过程中,采用层次架构不仅可以使系统结构更加清晰,还有助于提高开发效率和质量。因此,对层次架构的理解和应用是软件工程师必备的技能之一…...

校篮球联赛系统小程序的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,公告管理,基础数据管理,球队管理,球员管理,赛事信息管理,用户管理,轮播图信息 微信端账号功能包括&#…...

在 HKCR 新增项和值
HKEY_CLASSES_ROOT HKEY_CURRENT_USER\Software\Classes ∪ HKEY_LOCAL_MACHINE\Software\Classes ; 1. Win11 HKCR 根键默认是 System 所有, Win10 HKCR 根键默认是 Administrators 所有。 ; 2. 以 System、管理员 还是 普通用户 登录系统? ; 在注册表里&#x…...
Spring Boot 注解探秘:JSON 处理的魔法世界
在 Spring Boot 应用开发中,高效处理 JSON 数据同样至关重要。Spring Boot 不仅在 Bean 管理方面表现出色,提供强大的注解系统以助力开发者轻松管理 Bean 的生命周期和依赖注入,在 JSON 数据处理上也毫不逊色。本文将深入探讨 Spring Boot 中…...

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(一)
项目简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产…...

Linux常见指令、ls、pwd、cd、touch、mkdir、rmdir、rm等的介绍
文章目录 前言一、ls二、pwd三、cd四、touch五、 mkdir六、rmdir七、rm总结 前言 Linux常见指令、ls、pwd、cd、touch、mkdir、rmdir、rm等的介绍 一、ls 列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息 -a 列出目录下的所有文件,…...
【Kubernetes】常见面试题汇总(八)
目录 22.简述 Kubernetes 中 Pod 的健康检查方式? 23.简述 Kubernetes Pod 的 LivenessProbe 探针的常见方式? 24.简述 Kubernetes Pod 的常见调度方式? 22.简述 Kubernetes 中 Pod 的健康检查方式? 对 Pod 的健康检查可以通过…...
CentOS 7系统双网卡配置动态链路聚合(bond4)
一、应用场景 在机房建设时,服务器的网卡需要配置成bond4,可以使用我下面的配置文件和脚本来进行配置,简化配置流程。 bond4,即动态链路聚合,它可以将服务器上的两个物理网卡聚合为一个,两个网口逻辑成一…...

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)
ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录 这次是装实体机,一次失败的尝试。。。 名称型号CPUIntel Xeon E5-2673 V3GPURTX 3060 mobile 安装的时候不要选install third-party software for graphics and Wi-fi hardware and additional …...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...