自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 Leetcode 数据结构与算法题解大全——目录(推荐收藏,持续更新)

为了方便查找我写过的题解,就按照不同类型将其归类,这里做个目录置顶。链表:链表基础概念与经典题目(Leetcode题解-Python语言)哈希表:哈希表(散列表)python描述与leetcode题解笔记之上——原理与设计哈希表(散列表)python描述与leetcode题解笔记之中——实际应用哈希表(散列表)python描述与leetcode题解笔记之下——设计键二叉树:二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法从前中后序遍历构造二叉树,三题无脑秒杀二叉树层序遍历一

2021-11-04 22:18:47 1444 2

原创 Introduction to Data-Centric AI 以数据为中心的人工智能导论

本博客笔记来源于MIT的课程,传统的机器学习流程都是基于给定的数据集,通过选择不同的模型、调参、改进模型等方法,以获得在该数据集上任务的良好表现。但是在现实中,数据是不干净的,即使是如 ImageNet、Cifar-10 这样的大型公开数据集,里面也有不少错误标签,正所谓“garbage in, garbage out”以数据为中心的人工智能(DCAI)研究的正是改进数据集的技术,虽然长期以来研究人员都会通过一些试验发现数据集中的不足并进行修改,但 DCAI 认为数据的改进是一门系统工程学科。

2023-08-25 17:17:28 350

原创 Pytorch 中 LSTM 和 LSTMCell 的区别

对比即可得知,LSTMCell 就是图中的红色框,实际上就是一个隐藏层神经元,所以它没有 LSTM 中隐藏层数量这个参数。使用 LSTMCell 的方法就是 for 循环,遍历次数为。LSTM 就是中间的红色框,它将输入(蓝色框)和初始的隐藏层向量与状态向量(黄色框)作为输入,输出的是最终的隐藏层向量与状态向量(绿色框)。初始的隐藏层向量与状态向量的维度都是。初始的隐藏层向量与状态向量的维度都是。LSTMCell 的官方文档在。输入 input 的维度是。LSTM 的官方文档在。LSTM 函数的参数为。.

2022-08-29 17:42:01 1319 3

原创 深度学习入门笔记 —— 循环神经网络 RNN

(Bag-of-Words Model),如图所示,输入是三个句子,词袋模型首先要定义一个词汇表 vocabulary,里面记录了单词与数字的对应关系,共 9 个单词,所以特征矩阵就有 9 列;多对多可以分为直接的和延迟的,例如视频描述就是多张图像直接地对应多个描述,语言翻译则是一段话延迟地对应一段话,因为直接翻译语言之间的单词往往是不准确的。与前馈神经网络相比,RNN 也就是多了在不同时刻的隐藏层单元之间的权重矩阵,计算加权和的方法还是一样的,得到加权和就能通过激活函数得到激活值,最终也可以得到输出。..

2022-08-28 23:24:38 639

原创 Pytorch 中 Dataset 和 DataLoader,以及 torchvision 的 datasets 完全理解

Pytorch 中 Dataset 和 DataLoader,以及 torchvision 的 datasets 完全理解

2022-08-18 12:30:13 1424

原创 由浅入深,带你搞懂 Pytorch 中的张量 tensor 是什么

所谓的获取一个元素所需要的索引数,我们如果有 t = [1, 2, 3, 4],想得到 3的话就得写 t[2],如果有 t = [[1,2,3], [4,5,6], [7,8,9]],想取出 3 就得写 t[0][2]a 是两行三列的矩阵(二维张量),其布局为(3,1)表示在第一个维度(行)上,走 3 格可以得到下一个元素(下一行的元素),在第二个维度(列)上,走 1 格可以得到下一个元素(下一列的元素),以此类推。张量的秩告诉我们张量有多少个轴,张量的每个轴的长度告诉我们该轴有多少索引可用。......

2022-08-17 17:09:09 2357 2

原创 Python 中的迭代器(iter、next)与生成器(yield)解析

迭代器从集合的第一个元素开始访问,直到所有的元素被访问完结束,并且只能往前不会后退。注意 for 循环接收的只是可迭代对象而不是迭代器,所以实际上 for 循环帮我们同时完成了。方法对其进行迭代,如果迭代器的内容已经全部迭代完了,就会返回一个。,因为可迭代的对象(如列表、元组、字典、集合和字符串),得先使用。就是一个返回迭代器的函数,只能用于迭代操作,更简单点理解。既然能处理可迭代对象,当然也可以处理迭代器,如下。,而数字就不是可迭代的。,用于迭代列表、元组、字典、集合和字符串等。...

2022-08-15 23:04:24 1726

原创 Python 中的 *args 和 **kwargs 解析

函数 myFun 定义为先接收非关键字参数 args,再接收关键字参数 kwargs,所以在调用语句中,前三个字符串被看作是非关键字参数(args),后三个则被看作是关键字参数(kwargs)。实际上就是先用列表 args 中的元素作为非关键字参数调用了一次函数,然后再用字典 kwargs 中的元素作为关键字参数调用一次函数。Python 中传入函数的参数主要分为。...

2022-08-14 22:43:53 477

原创 PyTorch 中各种操纵维度的函数比较 view() reshape() squeeze() unsqueeze() flatten()

使用 view(-1) 也能实现和 flatten() 一样的功能,它们区别实际上就是 view() 函数和 reshape() 函数的区别,因为 flatten() 就是用 reshape() 实现的,看下。2、正因为 view() 函数返回的是视图,它要求张量数据在内存中是连续contiguous 的,而 reshape() 函数则没有这样的要求,它可以对连续张量或者非连续张量进行操作。最后,flatten() 函数的作用是展平张量,它还可以指定开始的维度和结束的维度,默认。......

2022-08-14 11:42:32 1068

原创 Python 中的 with 语句用法和 Pytorch 中的 with torch.no_grad() 解析

在 Pytorch 中,tensor 有一个 requires_grad 参数,如果设置为True,这个 tensor 的梯度就会被记录,则反向传播时,该 tensor 就会自动求导。显然,当处于测试或者推理阶段时,我们不需要反向传播,因此也不希望内存被大量 tensor 的梯度所占用,为了节约内存,我们应该把所有 tensor 的 requires_grad 都设置为 False,Python 中的 with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作(...

2022-08-13 22:32:50 1269

原创 C++ 学习之旅(2.5)——变量与函数

输出仍然是 ‘A’,这就说明了,指定的数据类型影响到了 cout 的表现,使得它会将变量 a 视作字符,并且打印字符。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。我们将变量 a 的数据类型指定为 char,并且赋值为 ‘A’,显然输出会得到 ‘A’;,唯一需要注意的是返回值,除了 main 函数之外,所有的函数都需要根据自己的声明返回某种类型的值或者不返回值,而 main 函数默认就会 return 0,最后写不写都可以。.....

2022-08-03 17:03:08 201

原创 Lagrange Multipliers 拉格朗日乘数法(含 KKT 条件)

欧式空间中,对于集合中的任意两点的连线,连线上任意一点都在集合中,我们就说这个集合是凸集。

2022-07-20 23:36:58 378

原创 深度学习入门笔记(9)—— Regularization to avoid overfitting 用正则化来避免过拟合

这两者加起来就是带L2正则化的线性回归,两者折衷的目标就是下降到绿色点。LogisticRegression中的L2正则化,损失函数L就是二元交叉熵,则目标函数就是损失函数+L2正则化项,L2正则化项就是对参数w求平方和,前面再乘以一个超参数λ(越大正则化程度越高)。然后是提前停止,思路很简单,将数据集划分为训练集、验证集和测试集,使用验证集来进行模型选择,在这里就相当于是训练轮数Epochs的超参数调整,选择模型在验证集上的性能顶点作为最优的训练轮数。............

2022-07-17 22:30:50 487

原创 深度学习入门笔记(8)—— Multilayer Perceptron 多层感知器

所谓多层感知器,其实就是具有一个或多个隐藏层(hidden layer)的全连接前馈神经网络,如图所示,在最重要的求取损失关于权重的偏导数的过程上,跟之前的 Logistic Regression 和 Softmax Regression 一样,仍然是使用链式法则进行求导。为了将感知器、Logistic Regression 和 Adaline 看作是单层神经网络,习惯上,我们把输入层作为第 0 层,把第一个隐藏层作为第 1 层,以此类推。在符号上也是如此,a2(1)a_2^{(1)}a2(1)​ 表示第

2022-07-13 16:11:01 1942

原创 Pytorch中损失函数 NLLLOSS 和 CROSSENTROPYLOSS 的区别

NLLLOSS 是 negative log likelihood loss 负对数似然损失函数,CROSSENTROPYLOSS 是交叉熵损失函数,它们都是用于多分类任务的损失函数,正如我在笔记中提到的,它们实际上是一样的,在 Pytorch 中这两者的区别就只在于接收的输入不同:torch.nn.functional.cross_entropy 将 logits 作为输入(内部自动实现 log_softmax)torch.nn.functional.nll_loss 将 log-probabiliti

2022-06-29 12:22:29 1524

原创 深度学习入门笔记(7)—— Multinomial Logistic Regression / Softmax Regression

首先介绍一个非常著名的多分类数据集 MNIST,也就是 0 到 9 的手写数字数据集。每个图像都是 28 * 28,用于Pytorch 数据读取的格式是 NCHW,即 Number、Channel、Height、Weight。读取图像之后,就能看到一个只有单通道的(灰度)图像,实际上就是一行行像素值的组合,用于 Softmax Regression 时输入得是一个向量,所以要将一行行的像素进行拼接,成为一个长的向量。同时,将像素值从 0 - 255 转化为 0 - 1 有利于梯度下降。回顾之前的 Logi

2022-06-29 12:05:46 515

原创 深度学习入门笔记(6)—— Logistic Regression

对比第三节中的 Adaline 和 Logistic Regression,可以发现它们只有两点不同:1、激活函数,Adaline 中的激活函数是恒等函数(线性),而 Logistic Regression 中的激活函数是 Sigmoid 函数(非线性);2、损失函数,Adaline 中的损失函数是均方误差,而 Logistic Regression 中的损失函数则是交叉熵。Sigmoid 函数如图所示,其值域为 0 到 1,输入为 0 时取值为 0.5h 即 hypothesis,就是我们的模型,由于

2022-06-26 14:01:18 632

原创 使用 imgaug 对图像进行数据增强 Data Augmentation

所谓数据增强,就正如 imgaug 库对自己的介绍:安装方法和各种改变图像的示例都可以在 Github 页面看到,一般我是看到哪种变换是我想实现的,就点击跳转到官方文档看用法。下面则是我的代码模板,十分简单实用:......

2022-06-25 13:14:52 1176

原创 深度学习入门笔记(5)—— Pytorch API 的基本用法框架

第一步,通常是定义我们的神经网络模型。类名后的括号表示我们定义的类会继承 torch.nn.Module,而 super 函数就是调用父类的方法,后面跟 __init__() 就是调用 torch.nn.Module 的构造函数,然后就是我们自定义的模型及其参数。在 forward 方法中则定义了数据是如何传递的。第二步,是实例化我们定义好的模型。通常会设定一个随机种子以方便复现结果,如果有 GPU 用 model.to() 就可以把模型移动到 GPU 上进行计算。最后是实例化一个优化器,要告诉优化器,模

2022-06-23 22:31:16 331

原创 深度学习入门笔记(4)—— Pytorch 和计算图的简单介绍

Pytorch 顾名思义,就是 Torch 7 移植到 Python 的版本,其最大亮点就是自动微分、动态计算图和 Numpy 集成。Pytorch 相比于 Numpy,优点在于支持 GPU 计算甚至是多设备计算,以及动态计算图。在 import 的时候,得记住 import 的是 torch 而不是 pytorch最常用的激活函数之一是 ReLU 函数,它可以看作是恒等函数 y = x 在 x 小于等于 0 时被截掉了(y 等于 0)。由于它在 x = 0 处的左右极限不相同,所以显然它在零点处不

2022-06-22 22:45:30 267

原创 Python 使用 ElementTree 解析 XML 文件

关于 XML 文件的简介,看看菜鸟就可以了,链接在此。假设我们有个存放电影数据的 XML 文件:movies.xml,其内容如下:可以看到,XML 文件是由多个被称为元素(Element)的东西组成的,每个元素都是有头有尾的,以 开头,以 结尾。可以把元素理解为树的一个个节点,每个元素主要有三个特征:1、tag,标签,即 XML 文件中在括号里的,被标红色的部分,是个字符串;2、atrrib,属性,即 XML 文件中在括号里的,被标黄色和绿色的部分,它们会组成一个字典 dict,黄色的就是 key

2022-06-10 17:19:46 1617

原创 深度学习入门笔记(3)——用梯度下降进行参数更新

首先是对感知器的简单回顾,假设现有的训练集为 D,共有 n 个训练数据,每个数据都有 m 个输入特征和一个输出标签。一个 epoch 就是遍历一次整个训练集,对于每一个训练数据,都计算其预测、计算误差、更新参数。在一个 epoch 中,每次针对一个训练数据进行参数更新的方法,称为在线方法或者随机梯度下降;而在一个 epoch 中将参数在每个训练数据上需要更新的值记录下来,最后叠加在一起再对参数进行更新的方法,称为批量方法。最常用的是这两种方法的折中方法:小批量方法。它的优点有三个:1、选择子集而不是单

2022-06-06 23:27:56 2270

原创 Mosh 的 MySQL 课程编程练习题目与答案

目录第二章2- SELECT 子句3- WHERE 子句4- 逻辑运算符5- IN 运算符6- BETWEEN 运算符7- LIKE 运算符8- REGEXP 运算符(正则表达式)9- IS NULL 运算符10- ORDER BY 子句11- LIMIT 子句第三章1- 内连接 INNER JOIN第二章2- SELECT 子句题目:解答:SELECT name, unit_price, unit_price * 1.1 AS new_priceFROM products3- WHER

2022-04-24 12:31:26 1248

原创 LEETCODE PATTERNS & Neetcode 刷题记录(Leetcode题解-Python语言)

LEETCODE PATTERNS 官网在这个链接,Neetcode 官网在这个链接题目页面解法一:蛮力解法,从头开始遍历数组中的元素,对于每个元素,都将其与后面的所有元素进行比较,若有重复则返回 True,可知此解法时间复杂度为O(n2)O({n^2})O(n2),空间复杂度为 O(1)O(1)O(1)解法二:排序后遍历,将数组排序之后,重复的元素一定是相邻的,所以很容易比较出来,但排序需要时间开销,所以此解法时间复杂度为 O(nlog⁡n)O(n\log n)O(nlogn),空间复杂度为 O(1)O(

2022-04-18 12:34:10 2921

原创 回溯的问题合集(Leetcode题解-Python语言)

78. 子集class Solution: def subsets(self, nums: List[int]) -> List[List[int]]: ans = [] cur = [] def dfs(i): if i == len(nums): ans.append(cur.copy()) return

2022-04-15 21:59:25 513

原创 深度学习入门笔记(2)—— 感知器

最经典的神经元模型,从左到右依次是:输入、权重、加权和、阈值、输出。加权和又叫做 Net Input,符号为 z,当 z 的值大于阈值时输出 1,小于阈值时输出 0。实现与门和或门,权重为 1,阈值分别为 1.5 和 0.5 即可。用偏置 b 代替负阈值,此时的加权和 z 就变成了 wTx+b{w^T}x + bwTx+b,新的阈值就是 0 了。更进一步的,可以将偏置看作是输入 1 时对应的权重,这样做的好处是可以写成向量内积的形式,有利于数学表达。但是,实际常用的还是 wTx+b{w^T.

2022-03-31 23:24:57 1643

原创 深度学习入门笔记(1)——导论部分

此笔记来源于 Sebastian Raschka 的 Introduction to Deep Learning 系列课程。首先介绍的是传统的编程范式,假设我们想实现垃圾邮件识别的功能,传统的方法就是由程序员来找出垃圾邮件的规则并对其进行编程,得到一个垃圾邮件识别的程序。机器学习的方法,可以通过输入邮件以及邮件对应的标签,通过算法自动得到机器学习模型,该模型可以代替传统方法中程序员手动编写规则得到的程序,实现垃圾邮件识别。单个的训练样本(不包含标签),其实就是一个特征向量(列向量),特征数量为

2022-03-31 19:06:28 1460

原创 二叉树最近公共祖先相关题目(Leetcode题解-Python语言)

236. 二叉树的最近公共祖先class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': def dfs(root: 'TreeNode', p: 'TreeNode', q: 'TreeNode'): # 如果当前节点为空,则说明 p、q 不在 node 的子树中,不可能为公共祖先,直接返回

2022-03-31 13:31:28 1249

原创 两数、三数、四数之和相关题目(Leetcode题解-Python语言)

作为 Leetcode 的第一题,两数之和自然是知名度最高的,从两数之和出发也有不少的衍生题目,下面就让我们好好地解决它们。1. 两数之和class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: record = dict() for i, num in enumerate(nums): if target - num in record:

2022-03-27 19:47:04 1333

原创 Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别

之前我写过一篇文章,比较了 torch.Tensor() 和 torch.tensor() 的区别,而这两者都是深拷贝的方法,返回张量的同时,会在内存中创建一个额外的数据副本,与原数据不共享内存,所以不受原数据改变的影响。这里,介绍两种浅拷贝方法,torch.as_tensor() 和 torch.from_numpy(),同样还是从官方文档出发:torch.as_tensor()torch.from_numpy()直接对比着来看,最明显的,torch.as_tensor() 接收三个参数(da

2022-03-25 11:25:49 5154

原创 Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

直接在搜索引擎里进行搜索,可以看到官方文档中两者对应的页面:分别点击进去,第一个链接解释了什么是 torch.Tensor:torch.Tensor 是一个包含单一数据类型元素的多维矩阵(数组)。正因为 torch.Tensor 只包含单一的数据类型,所以后面文档就列出了不同数据类型对应的不同 Tensor。然后最后有一句话:torch.Tensor 是默认张量类型 (torch.FloatTensor) 的别名。也就是说,torch.Tensor() 的作用实际上跟 torch.F

2022-03-24 19:25:13 7480 2

原创 字符串匹配经典题目——KMP算法(Leetcode题解-Python语言)

28. 实现 strStr()strStr(haystack: str, needle: str) 的作用就是在 haystack 字符串(长度为 n)中找出 needle 字符串(长度为 m)出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 ;如果 needle 是空字符串,则返回 0。 Python 中对应的写法是 haystack.find(needle)。如果让我们自己实现这个函数,最简单的思路就是对 haystack 字符串中每个字符的位置,都用 needle 字符串试着去匹配

2022-03-16 13:34:36 2268

原创 字符串经典题目(Leetcode题解-Python语言)

344. 反转字符串class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ left = 0 right = len(s) - 1 while left < right: s[lef

2022-03-15 22:25:03 803

原创 贪心的问题合集(Leetcode题解-Python语言)

贪心算法(Greedy Algorithm):是一种在每次决策时采用当前状态下最优或最好的策略,从而希望导致结果是最好或最优的算法。455. 分发饼干class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: g.sort(reverse=True) s.sort(reverse=True) p1, p2 = 0, 0 an

2022-03-10 16:50:56 1152

原创 队列的基础概念与经典题目(Leetcode题解-Python语言)

队列是先入先出(后入后出)的数据结构,常用操作就 push 和 popleft,Python中用列表中的 pop(0) 或者 collection.deque的 popleft() 都可以。普通队列225. 用队列实现栈class MyStack: def __init__(self): self.queue1 = [] self.queue2 = [] self.size = 0 def push(self, x: int) -&g

2022-03-10 15:28:54 1029

原创 在数组中找重复数、只出现一次的数或丢失数的题目(Leetcode题解-Python语言)

在一维数组中的考察中,最常见的就是找出数组中的重复数、只出现一次的数或者丢失(消失)数等等。一般来说,首先想到的就是用哈希表(集合)来记录出现过的数,基本所有的题都可以用集合来做,而技巧性在于有时可以把原数组自身作为哈希表;其次就是位运算,原理是相同的数做异或运算 ^ 会得到0,而一个数与0做异或会得到这个数本身;最后,在排好序或者对空间要求为O(1)但又不能修改原数组的情况下,二分查找也是一种方法。136. 只出现一次的数字(找出一个只出现一次的数字)class Solution: de

2022-02-08 16:27:17 1005

原创 Leetcode周赛复盘——第 71 场力扣双周赛与第 279 场力扣周赛

双周赛:5984. 拆分数位后四位数字的最小和class Solution: def minimumSum(self, num: int) -> int: a, b, c, d = sorted(list(map(int, str(num)))) return 10 * (a + b) + c + dstr(num)得到字符串序列,然后用map函数对序列的每个字符转换为数字,最后变为列表并且排序,最小的两个数 a、b 一定在十位所以乘10,个位则是 c

2022-02-06 15:48:14 499

原创 Leetcode周赛复盘——第 278 场力扣周赛

5993. 将找到的值乘以 2我的做法是将数组从小到大排序之后,再将找到的值乘以2:class Solution: def findFinalValue(self, nums: List[int], original: int) -> int: nums.sort() for num in nums: if original == num: original *= 2 return or

2022-01-30 12:43:53 610

原创 Leetcode周赛复盘——第 276 场力扣周赛

第一次参加周赛,AC了三道题,也算不错的成绩了,从现在开始每周的周赛我都会参加并且复盘,有兴趣的小伙伴可以一起讨论。5980. 将字符串拆分为若干长度为 k 的组class Solution: def divideString(self, s: str, k: int, fill: str) -> List[str]: a, b = divmod(len(s), k) ans = [] temp = '' now = 0

2022-01-16 13:08:10 351

原创 子串、子数组与子序列类型问题的动态规划求解(Leetcode题解-Python语言)

一般来说,子串和子数组都是连续的,而子序列是可以不连续的,遇到子序列问题基本上都是用动态规划求解。53. 最大子数组和(剑指 Offer 42. 连续子数组的最大和)class Solution: def maxSubArray(self, nums: List[int]) -> int: n = len(nums) dp = [-10001] * (n+1) dp[0] = nums[0] for i in range(1

2021-12-07 18:25:55 909

Mosh 的 MySQL 课程的相关文件

这是 Mosh 的 MySQL 课程的相关文件,包含上课练习所需的数据库以及所有相关文件,课程视频可以从网络自行搜索得到,我本人做题的记录也写在了博客,欢迎浏览 https://blog.csdn.net/cnhwl/article/details/124379022

2022-04-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除