自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(232)
  • 收藏
  • 关注

原创 深度学习笔记 —— 注意力机制 + 注意力分数

随意线索:指有意识去关注的点根据查询去寻找比较感兴趣的东西

2022-05-12 20:36:20 542 3

原创 深度学习笔记 —— 样式迁移

直观地理解就是滤镜目的是训练这样一张图片X,使得该图片放进和内容图片同样一个CNN的时候在某一层的输出能够匹配上内容;同理,X和样式图片进入同一个CNN,某些层的输出在样式上能够匹配。如果能够同时满足这两个条件,那么X既保留了内容,也保留了样式。import torchimport torchvisionfrom torch import nnfrom d2l import torch as d2limport matplotlib.pyplot as plt# 阅读内容和样式图

2022-04-30 17:15:35 1762 1

原创 深度学习笔记 —— 转置卷积

语义分割要做像素级别的预测,但是卷积不断地减小高宽,所以需要另外一种卷积把小的高宽变大。转置卷积:输入中的单个元素与kernel按元素做乘法但不相加,然后按元素写回到原始的地方。再谈转置卷积:换算成卷积之后,卷积是正常卷积,也就是填充为0,步幅为1,与前面填充和步幅是无关的。如果要做逆变换需要能推出来:n >= sn' + k -2p - s(刚好整除的情况下取等号)转置卷积是形状上做逆运算,但元素值不是。转置卷积本质上还是一种卷积。...

2022-04-25 19:10:40 1023

原创 深度学习笔记 —— 语义分割和数据集

语义分割只关心像素属于哪个类,实例分割关心像素属于哪个类的哪个实例(可以认为是目标检测的进化版本)。import osimport torchimport torchvisionfrom d2l import torch as d2limport matplotlib.pyplot as pltd2l.DATA_HUB['voc2012'] = (d2l.DATA_URL + 'VOCtrainval_11-May-2012.tar', ...

2022-04-21 22:05:36 2601

原创 深度学习笔记 —— 物体检测和数据集 + 锚框

任务:识别我们所有感兴趣的物体,同时将每个物体的位置找出来import torchfrom d2l import torch as d2limport matplotlib.pyplot as pltd2l.set_figsize()img = d2l.plt.imread('./img/catdog.jpg')d2l.plt.imshow(img)plt.show()# 定义在这两种表示之间进行转换的函数def box_corner_to_cente..

2022-04-19 20:48:05 3982

原创 深度学习笔记 —— 微调

通常希望能在很大的数据集上训练好的模型能够帮助提升精度。一部分做特征抽取,一部分做线性分类。核心思想:在源数据集(通常是比较大的数据集)上训练的模型,我们觉得可以把做特征提取那块拿来用。(越底层的特征越为通用)在自己的数据集上训练的时候,使用一个与pre-train一样架构的模型,做除了最后一层的初始化的时候,不再是随机的初始化,而是使用pre-train训练好的weight(可能与最终的结果很像了,总好于随机的初始化),等价于把特征提取模块复制过来作为我初始化的模型,使得我一开始就..

2022-04-18 21:49:42 1474

原创 深度学习笔记 —— 数据增广

固定形状?卷积神经网络通常是一个固定的输入。作用好不好是不一定的。很多时候觉得它有用是因为觉得测试集里会有图片跟这个效果是差不多的。所以如何选择数据增强?可以从后往前推,想一下部署和测试集里面的图片与训练集的图片会有什么变化,从而确定需要什么样的数据增强方式。多样性更强,使得泛化性更好。增广的目的是想让训练集更像测试集,如果完全一样就更好了!:)import torchimport torchvisionfrom torch impo...

2022-04-18 17:10:31 5244

原创 深度学习笔记 —— 批量归一化

梯度在上面(损失处)的时候比较大,越到下面越容易变小,因为很多时候都是n个很小的数相乘,乘到最后梯度就比较小了。所以就导致上面参数更新快,而下面参数更新慢(下面参数在小范围内变化时,抽取的底层特征变化不大,此时上层的参数是针对这些底层特征进行学习的)。这也意味着,如果下面的参数改变了,那么上面的参数之前也就白学了,需要重新训练。使得收敛比较慢。核心想法:方差和均值的分布不同层之间变化,如果把分布固定住了,相对来说就是比较稳定的。模型稳定了,也就是说更新的时候不会爆炸,也不会太小,收敛就不会变慢...

2022-04-17 21:59:16 1506

原创 深度学习笔记 —— 池化层

卷积层对位置敏感,比如下面的例子中,一个像素的偏移就会导致0输出而现实情况下,边缘很容易会发生变化。而我们并不希望它对位置过于敏感,所以提出了“池化层”最大池化层可以允许输入发生一定范围内的偏移,作用在卷积输出上,有一定模糊化的效果每个输入通道做一次池化层,而不像卷积层一样融合多个输入通道import torchfrom torch import nnfrom d2l import torch as d2l# 实现池化层的正向传播def poo.

2022-04-15 18:39:47 1904

原创 深度学习笔记 —— 卷积层里的多输入多输出通道

输出是一个单通道,因为不管输入有多少个通道,最后都会把结果相加因为1x1卷积层每次只识别一个像素,而不查看该像素与周围像素的关系,所以它并不识别空间信息import torchfrom d2l import torch as d2l# 多通道互相关运算def corr2d_multi_in(X, K): return sum(d2l.corr2d(x, k) for x, k in zip(X, K))# 验证互相...

2022-04-15 17:36:10 1999 3

原创 深度学习笔记 —— 卷积层里的填充和步幅

有时候,如果输入图像的尺寸比较小,那么通过几层卷积之后尺寸就不能够支持继续做卷积了,从了限制了网络的深度填充通常设置成kernel_size - 1,以保持输入输出尺寸一致,算起来比较方便import torchfrom torch import nndef comp_conv2d(conv2d, X): # 在维度的前面加入一个通道数和批量大小数 X = X.reshape((1, 1) + X.shape) Y ...

2022-04-14 20:43:49 1161

原创 深度学习笔记 —— 卷积层

单隐藏层就已经需要14GB的参数了!平移不变性:识别器不会因为像素的位置而发生改变局部性:找Waldo只需要看局部的信息即可,不需要看全局的信息个人理解:由前面的例子可知,全连接层需要的参数量会非常多,这也就使得MLP受到了限制。但是为了解决问题,提出了“平移不变性”和“局部性”两个性质。我们从全连接层出发,应用两种性质,对原本的计算方式做一些改进,也就得到了卷积层的计算方式。相较于全连接,平移不变性使得卷积的权重在一定范围内,v是相同的;但是由于局...

2022-04-14 17:52:05 4916 2

原创 深度学习笔记 —— PyTorch 神经网络基础

import torchfrom torch import nnfrom torch.nn import functional as F'''模型构造'''# nn.Sequential定义了一种特殊的Modulenet = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))X = torch.rand(2, 20)print(net(X))# 自定义块# 任何一个层或者一个神经网络都应该是Mo.

2022-04-14 00:39:59 839 2

原创 线段树(Segment Tree)

Why Segment Tree:面对这样一个数组,我们要频繁地做“查询区间和”(query)以及“更新某一个值”(update)的操作。对于每一次查询(包含n个元素)和更新,如果采用暴力的方法,那么显然查询时间复杂度为O(n),更新的时间复杂度为O(1);如果我们采用前缀和的方法,那么查询的时间复杂度下降为O(1),但是更新的时间复杂度却上升为O(n)。为了平衡一下这两种操作的复杂度,提出了一种新的数据结构——线段树。What is Segment Tree:...

2022-04-03 22:33:48 185

原创 深度学习笔记 —— 数值稳定性 + 模型初始化和激活函数

t:层:第t-1层隐藏层的输出y:要优化的目标函数这里的h都是一些向量,向量关于向量的导数是一个矩阵,这里做了太多的矩阵乘法,就容易导致梯度爆炸和梯度消失的问题。

2022-03-26 23:58:52 699

原创 深度学习笔记 —— 权重衰退 + 丢弃法

硬性限制柔性限制“罚”(即后一项)的引入,使得最优解往原点走,使得w的绝对值会小一些,从而降低了整个模型的复杂度

2022-03-10 23:44:45 1614

原创 深度学习笔记 —— 模型选择 + 过拟合和欠拟合

我们关心的是泛化误差,而非训练误差。这也给我们一定启示啊,光背题是行不通滴,要理解背后的本质和逻辑Attention:验证数据一定不要和训练数据混在一起! 也不能用测试数据集来调超参数!好处是尽可能地把数据作为训练数据集,坏处是代价高(因为要跑多次)数据简单,应该选择比较低的模型容量,就会得到一个比较正常的结果;如果简单数据使用了很复杂的模型容量,就会出现过拟合。模型容量低的时候,因为过于简单,所以难以拟合数据,造成训练误差和...

2022-03-05 20:03:55 826

原创 深度学习笔记 —— 多层感知机

感知机是一个二分类模型,求解算法等价于使用批量大小为1的梯度下降。感知机的缺点:不能解决XOR问题

2022-02-27 22:25:01 3472

原创 深度学习笔记 —— Softmax回归 + 损失函数 + 图片分类数据集

优点:梯度永远是常数,会带来稳定性上的好处。缺点:零点处不可导,此处梯度剧烈变化,这种不平滑性导致在预测值与真实值相差比较小的时候变得不太稳定。也可以自己提出损失函数。因此,分析损失函数时,可从其梯度函数的图像入手,分析当预测值与真实值相差较大或者较小时,进行更新会是怎样的情况。...

2022-02-18 22:27:31 1729 2

原创 深度学习笔记 —— 线性回归 + 基础优化算法

import randomimport torchfrom d2l import torch as d2l# 根据带有噪声的线性模型构造一个人造数据集def synthetic_data(w, b, num_examples): """生成 y = Wx + b + 噪声""" X = torch.normal(0, 1, (num_examples, len(w))) # 均值为0,标准差为1 y = torch.matmul(X, w) + b y += .

2022-02-13 23:08:12 1075 1

原创 深度学习笔记 —— 自动求导

显示构造:先定义好公式,再待入值。隐式构造:系统负责记住一步步的计算,之后定义公式。import torch# 假设我们想对函数y = 2xTx关于列向量x求导x = torch.arange(4.0)# 计算y关于x的梯度之前,需要一个地方来存储梯度x.requires_grad_(True) # 等价于 x = torch.arange(4.0, require_grad=True)print(x.grad) ...

2022-02-13 13:51:12 1628 3

原创 深度学习笔记 —— 矩阵计算

布局:个人理解,不论是分子布局,还是分母布局,都不过是人为规定的布局方式而已。它们的目的是为了对求导后的形式作规定,以达到方便计算的目的。

2022-02-11 23:02:28 660

原创 深度学习笔记 —— 线性代数

线性代数实现:1.标量由只有一个元素的的张量表示import torchx = torch.tensor([3.0])y = torch.tensor([2.0])2.可以将向量视为标量值组成的列表x = torch.arange(4)# 通过张量的索引来访问任一元素x[3]3.访问张量的长度x = tensor.arange(4)len(x)Output:4只有一个轴的张量,形状只有一个元素x.shapeOutput:torch.Siz

2022-01-30 01:41:28 460

原创 深度学习笔记 —— 数据操作 + 数据预处理

数据操作:0-d:标量,可表示一个类别1-d:向量,可表示一个特征向量(把样本抽象成一行数字)2-d:矩阵,可表示样本的特征矩阵,比如一个三行三列的矩阵,每一行表示一个样本,每一列表示不同的特征3-d:可表示RGB图片(宽x高x通道),宽即为列数,高为行数,通道即为RGB三个通道。4-d:可表示一个RGB图片的批量(批量大小x宽x高x通道)5-d:可表示一个视频批量(批量大小x时间x宽x高x通道)由此可见,维度越高,我们能表示的数据的信息就越多。[::3, ::2]..

2022-01-20 20:13:50 1407 1

原创 LeetCode: 600. 不含连续1的非负整数(01字典树+dp)

给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含连续的1的个数。示例 1:输入: 5输出: 5解释:下面是带有相应二进制表示的非负整数<= 5:0 : 01 : 12 : 103 : 114 : 1005 : 101其中,只有整数3违反规则(有两个连续的1),其他5个满足规则。说明: 1 <= n <= 109分析: 该题是一个01字典树+dp的问题,一开始除了暴力的方法想不到其他的,还是看了题解。不得不说,难...

2021-09-11 18:09:49 176

原创 LeetCode: 1109. 航班预订统计(差分数组求区间和)

这里有n个航班,它们分别从 1 到 n 进行编号。有一份航班预订表bookings ,表中第i条预订记录bookings[i] = [firsti, lasti, seatsi]意味着在从 firsti到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi个座位。请你返回一个长度为 n 的数组answer,其中 answer[i] 是航班 i 上预订的座位总数。示例 1:输入:bookings = [[1,2,10],[2,3,2...

2021-08-31 19:49:14 282

原创 LeetCode: 526. 优美的排列(状态压缩DP)

假设有从 1 到 N 的N个整数,如果从这N个数字中成功构造出一个数组,使得数组的第 i位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第i位的数字能被i整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?示例1:输入: 2输出: 2解释:第 1 个优美的排列是 [1, 2]: 第 1 个位置(i=1)上的数字是1,1能被 i(i=1)整除 第 2 个位置(i=...

2021-08-16 23:18:32 239

原创 LeetCode: 5815. 扣分后的最大得分

给你一个m x n的整数矩阵points(下标从 0开始)。一开始你的得分为 0,你想最大化从矩阵中得到的分数。你的得分方式为:每一行中选取一个格子,选中坐标为(r, c)的格子会给你的总得分 增加points[r][c]。然而,相邻行之间被选中的格子如果隔得太远,你会失去一些得分。对于相邻行r 和r + 1(其中0 <= r < m - 1),选中坐标为(r, c1) 和(r + 1, c2)的格子,你的总得分减少abs(c1 - c2)。...

2021-07-18 21:17:39 184 1

原创 Java学习笔记之Java特性

1.类型转换double k;k = 3.14;System.out.println(k);output:3.14int k;k = 3.14;System.out.println(k);Error! Cannot convert from double to int!但是在C编译器中是可以通过的java不允许执行丢失精度的操作int k;k = (int)3.14;System.out.println(k);强制转换,在java中是可以通过的2.b.

2021-07-02 23:41:27 192 1

原创 LeetCode: 752. 打开转盘锁(双向bfs)

你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为'0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以解锁的数字.

2021-06-26 20:09:03 291

原创 LeetCode: 239. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 ...

2021-06-23 21:06:59 150 1

原创 C++学习笔记之C++特性

1.类 class#include <iostream>using namespace std;struct Student{ int sid; int score; //C++ 可以在结构体中定义函数 void hehe(){ cout << "Hehe..." << endl; }};/* 之所以结构体中可以定义函数,是因为C++并没有区别 对待结构体与类*//*clas...

2021-06-10 18:03:43 188

原创 LeetCode: “马”在棋盘上的概率

已知一个NxN的国际象棋棋盘,棋盘的行号和列号都是从 0 开始。即最左上角的格子记为(0, 0),最右下角的记为(N-1, N-1)。现有一个 “马”(也译作 “骑士”)位于(r, c),并打算进行K 次移动。如下图所示,国际象棋的 “马” 每一步先沿水平或垂直方向移动 2 个格子,然后向与之相垂直的方向再移动 1 个格子,共有 8 个可选的位置。...

2021-06-04 20:19:36 262

原创 计算机图形学初认识

计算机图形学:研究怎样利用计算机来显示、生成和处理图像的原理、方法和技术的一门学科。它的输入是结构特征数据,输出是图像信号。

2021-06-02 21:53:54 267 1

原创 LeetCode: 523. 连续的子数组和

给你一个整数数组 nums 和一个整数k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。示例 1:输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。示例 2:输入:n..

2021-06-02 18:23:31 220

原创 LeetCode: 1074. 元素和为目标值的子矩阵数量

给出矩阵matrix和目标值target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵x1, y1, x2, y2是满足 x1 <= x <= x2且y1 <= y <= y2的所有单元matrix[x][y]的集合。如果(x1, y1, x2, y2) 和(x1', y1', x2', y2')两个子矩阵中部分坐标不同(如:x1 != x1'),那么这两个子矩阵也不同。示例 1:输入:matrix = [[0,1,0],[1,1,...

2021-05-31 23:21:27 179 3

原创 LeetCode: 1081. 不同字符的最小子序列

返回s字典序最小的子序列,该子序列包含s的所有不同字符,且只包含一次。示例 1:输入:s = "bcabc"输出:"abc"示例 2:输入:s = "cbacdcbc"输出:"acdb"提示:1 <= s.length <= 1000s 由小写英文字母组成分析: 该题有两个要求,一是要保证不同的字符只能出现一次,二是保证返回字典序最小的子序列。为了保证整体字典序最小,我们要尽可能使字典序较小的字符出现在前面。只出现一次的字符我们也要保留...

2021-05-05 22:11:51 234

原创 LeetCode: 240. 搜索二维矩阵 II

编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19]...

2021-05-02 21:58:15 320

原创 LeetCode: 137. 只出现一次的数字 II

给你一个整数数组nums ,除某个元素仅出现 一次外,其余每个元素都恰出现三次 。请你找出并返回那个只出现了一次的元素。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,99]输出:99提示:1 <= nums.length <= 3 * 104-231 <= nums[i] <= 231 - 1nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次分析:...

2021-04-30 21:29:01 127 2

原创 LeetCode: 377. 组合总和 Ⅳ

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。示例 2:输入:nums.

2021-04-27 21:38:24 87

空空如也

空空如也

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

TA关注的人

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