自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(186)
  • 资源 (8)
  • 收藏
  • 关注

原创 300行代码实现一个优雅的PyTorch Trainer

在江湖上混,没有一把趁手的兵器怎么能行。对于一个深度学习算法工程师来说,一个强大的Trainer就是趁手的兵器,在复现顶会论文的时候不用每次都要写大量的模版代码,可以更加关注模型实现本身。我平时也开源了一些深度学习项目,累计获赞400+,最近整理了一些之前的代码,也看了很多优秀的开源实现,然后从0实现了一个小而美的trainer...

2022-06-05 22:06:26 703 1

原创 可能95%的人还在犯的PyTorch错误

或许是by design,但是这个bug目前还存在于很多很多人的代码中。就连特斯拉AI总监Karpathy也被坑过,并发了一篇推文......

2022-06-05 20:39:04 353

原创 cv2.rectangle不会修改原图像

正常情况下,cv2.rectangle是inplace操作,即会修改输入的原始图像。import cv2img = cv2.imread("1.jpeg")# img会被修改cv2.rectangle(img, (10, 10), (1000, 1000), color=(255, 0, 0))cv2.imwrite("rec_img.jpg", img)可以发现输入的图片数组确实在函数中被修改了。在训练深度神经网络的时候,我们经常需要将图片的通道顺序从BGR切换成RGB。一个简单的方

2021-12-10 21:43:04 4476

原创 Python3和Python2中round函数的差异

Python3和Python2中round函数的差异Python2中round函数为四舍五入:>>> round(1.5)2.0>>> round(2.5)3.0>>> round(3.5)4.0>>> round(4.5)5.0Python3中当遇到5的时候会舍入到最近的偶数>>> round(1.5)2>>> round(2.5)2>>> roun

2021-04-03 12:03:57 263

原创 Pytorch-nn.Conv2d中groups参数的理解

Pytorch-nn.Conv2d中groups参数的理解class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)group参数的作用是控制分组卷积。直接通过实际的例子加以说明。import torchimport ...

2020-04-02 11:34:23 2922

原创 编译全功能vim8

编译全功能vim8这篇博客讲解如何在ubuntu下编译vim8源码。参考:YCM1.卸载原有的vimsudo apt-get purge vim vim-runtime vim-gnome vim-common vim-tiny vim-gui-common然后用dpkg -l | grep vim查看还有什么和vim相关的包,如果有,用dpkg --purge删除。2.安装编译vim...

2020-02-24 12:02:44 1361

原创 禁用vscode硬件加速

禁用vscode硬件加速有以下两种方法:启动时加上--disable-gpu选项ctrp+shift+p打开命令面板,找到Preferences: Configure Runtime Arguments命令,然后加上"disable-hardware-acceleration": true即可。...

2020-02-24 12:02:15 5806 2

原创 深入理解python的package机制

深入理解python的package机制参考:深入理解python package类(class),模块(module),包(package)模块就是python文件,里面包含着代码(类)。包是一个包含 __init__.py 的文件夹。三者的关系就是:模块包含类,包至少包含一个名为 __init__.py 的模块。一个包的例子如下:package├── __init__.py├─...

2020-02-24 12:01:32 549 1

原创 永久性地修改PYTHONPATH

永久性地修改PYTHONPATHimport sys; sys.path.append()这种方法用来临时修改PYTHONPATH。如果想要永久性的修改PYTHONPATH,有以下两种方法。修改~/.bashrc,添加export PYTHONPATH=$PYTHONPATH:/my/other/path以anaconda为例,在~/anaconda3/envs/xxx/lib/pytho...

2020-02-24 12:01:02 1428

原创 Fatal error: cuda.h, No such file or directory

Fatal error: cuda.h, No such file or directory最近在编译别人源代码的时候,gcc报了如下错误:Fatal error: cuda.h, No such file or directory解决方法分为两步:在~/.bashrc中设置环境变量export CUDA_HOME=/home/usr/local/cuda-9.0export PAT...

2020-02-24 12:00:32 13048 9

原创 常用的vim操作

常用的vim操作撤销和重做u,撤销ctrl+r,重做翻页ctrl+d,向下翻半页,d=downctrl+u,向上翻半页,u=upctrl+f,向下翻一整页,f=forwardctrl+b,向上翻一整页,b=backward基本编辑指令Esc,回到普通模式i,在当前位置插入I,在行首插入a,在后一个位置插入A,在行尾插入o,在下方插入新行O,在上方插入新行x,删除光...

2020-02-24 11:59:49 224

原创 常用的ipdb调试命令

常用的ipdb调试命令常用的ipdb命令整理如下。h(help):帮助命令s(step into):进入函数内部n(next):执行下一行b(break): b line_number打断点cl(clear): 清除断点c(continue): 一直执行到断点r(return): 从当前函数返回j(jump): j line_number,跳过代码片段,直接执行指定行号所在的代...

2020-02-23 10:30:44 3004

原创 如何知道当前vim某个设置的状态

如何知道当前vim某个设置的状态假如此时在vim中我们想查看foldmethod选项的具体值,该怎么办呢?其实很简单,只需要下面这条命令即可:set foldmethod?

2020-02-23 10:30:13 594

原创 如何在vim中执行shell命令

如何在vim中执行shell命令vim8以后也支持了内置terminal,但是今天我要说的是一种古老的方式。ctrl+z,让vim进入后台运行在shell里为所欲为fg回到vim

2020-02-23 10:29:43 1068

原创 主动学习python框架libact配置教程

主动学习python框架libact配置教程配置教程libact是一个Python包,旨在让用户更容易地进行主动学习。该包不仅实现了几种流行的主动学习策略,而且还提供了一种“active learning by learning”算法,该算法可以帮助用户动态地自动选择最佳主动学习策略。此外,该包还提供了一个统一的接口,用于实现更多的主动学习策略。接下来进入正题:如何安装libactgi...

2020-02-23 10:29:02 957 1

原创 为tmux和vim开启真彩色

为tmux和vim开启真彩色有一些vim主题(如solarized)在GUI和终端下效果不同,有可能是因为这个主题需要true color(24位颜色)的支持,而通常终端只开启256色(如xterm-256color)。下面来看看怎么开启true color支持。验证终端的色彩支持真彩色的支持是需要终端的支持的,常用的终端(如iterm2,konsole等)都已经支持了。我们可以自己验证终...

2020-02-23 10:28:03 3440

原创 为tmux和vim开启斜体和真彩色

为tmux和vim开启斜体和真彩色这篇文章是我上一篇博客:为tmux和vim开启真彩色的拓展一般终端会支持斜体,但是tmux中是无法显示斜体的。网上的很多教程都已经过时,今天我来分享下如何在tmux中启用斜体吧。参考:reference1. 检查tmux中能否显示斜体echo -e "\e[3mitalic\e[23m"2. 创建新的终端类型我们创建一种新的终端类型tmux-256c...

2020-02-23 10:27:21 1344

原创 vim查询快捷键是否已被使用

vim查询快捷键是否已被使用按:进入vim的命令行模式,然后输入verbose map <key>,其中<key>即为你要查询的按键。例子:verbose map <F2>

2020-02-23 10:26:38 1665

原创 tmux常用操作

tmux常用操作tmux所有快捷键都有一个前缀ctrl+b,这里简称prefix。会话tmux new,创建默认名称的会话tmux kill-server,关闭所有会话prefix s,列出会话,可进行切换窗口prefix c,创建一个新窗口窗格prefix %,水平方向创建窗格prefix ",竖直方向创建窗格prefix o,顺时针切换窗格prefix 方向键,用方向键...

2020-02-23 10:26:08 214

原创 vim和系统粘贴板交互

vim和系统粘贴板交互默认情况下,vim是无法和系统粘贴板交互的,如何实现这两者的沟通呢?查看vim是否支持clipboardvim --version | grep "clipboard"如果显示的是-clipboard,则需要安装图形化界面的vim,或者重新编译vim。安装图形化界面的vim。sudo apt-get install vim-gnome安装的时候可能会出现依赖...

2020-02-23 10:25:18 289

原创 vim和git的完美结合:使用vimdiff查看代码差异

vim和git的完美结合:使用vimdiff查看代码差异先配置gitgit config --global diff.tool vimdiffgit config --global difftool.prompt falsegit config --global alias.d difftool # 给difftool起个别名d配置好了之后,在命令行中运行git d,即可查看代码差异。...

2020-02-23 10:24:13 1650 2

原创 Pytorch-如何查看网络的模块和参数

Pytorch-如何查看网络的模块和参数在实验的过程中,我们经常需要知道当前网络由哪些模块组成,以及这些模块当前的参数是什么。查看模块以如下网络为例:m = nn.Sequential(nn.Linear(2, 2), nn.ReLU(), nn.Sequential(nn.BatchNorm2d(2), nn.ReL...

2020-02-06 22:36:08 4349

原创 Pytorch-创建requires_grad=True的tensor

Pytorch-创建requires_grad=True的tensor有以下四种方法x = torch.randn(2, 3, requires_grad=True)x = Variable(torch.Tensor([2, 3]), requires_grad=True)x = torch.tensor([2.0, 3], requires_grad=True)或者x = torch....

2020-02-06 22:35:37 6596 1

原创 Pytorch-Tensor和tensor的区别

Pytorch-Tensor和tensor的区别torch.Tensor是torch.FloatTensor的别名,是python类,只能创建FloatTensor。从首字母大写也可以看出一些端倪。torch.tensor是一个函数,可以将其它数据结构转化成tensor,可以创建FloatTensor,IntTensor等等。例子:>>> torch.Tensor([1,...

2020-02-06 22:35:07 476

原创 Pytorch-GPU模型和CPU模型输出不同

Pytorch-GPU模型和CPU模型输出不同实验的时候发现:对于同一个网络结构,使用相同的输入,相同的网络权值,网络在CPU模式和GPU模式下的输出会有细微的不同。猜测的原因有两个:浮点数自身的不准确性CPU和GPU计算架构不同不过所幸,这种细微的差别不影响实验的结果。...

2020-02-06 22:34:19 2969

原创 Pytorch-BN层详细解读

Pytorch-BN层BN解决了Internal Covariate Shift问题机器学习领域有个很重要的假设:独立同分布假设,即假设训练数据和测试数据是满足相同分布的。我们知道:神经网络的训练实际上就是在拟合训练数据的分布。如果不满足独立同分布假设,那么训练得到的模型的泛化能力肯定不好。再来思考一个问题:为什么传统的神经网络要求将数据归一化(训练阶段将训练数据归一化并记录均值和方差,测试...

2020-02-06 22:32:25 16487 1

原创 python3 zip()函数

将可迭代对象作为参数,将参数中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同。利用*号操作符进行解压。例子>>> a = [1,2,3] #此处可迭代对象为列表>>> b = [4,5,6]>>> c = [4,5,6,7,8]>&gt...

2020-02-06 22:28:32 112

原创 PowerShell字符串太长怎么办

平时遇到的PowerShell字符串的问题有两种情况1. 单行字符串太长$str = "It's a very very very very very very very long string"可以通过字符串拼接的方法解决这个问题:$str = "It's a very very very very " + "very very very long string"2....

2020-02-06 22:27:24 3351

原创 NumPy数组

NumPy数组是一个多维数组对象,称为ndarray。它由两部分组成:实际的数据描述这些数据的元数据大部分的操作只针对于元数据,而不改变底层实际的数据。关于NumPy数组有以下几点是必须了解的:数组的下标是从0开始的同一个NumPy数组中所有元素的类型都必须是相同的。NumPy数组属性在详细介绍NumPy数组之前,先详细介绍下NumPy数组的基本属性。NumPy数组的维数称...

2020-02-06 22:26:31 636

原创 Numpy学习笔记-where函数

用法:numpy.where(condition),输出满足条件的元素的坐标。这里的坐标以tuple的形式给出。原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。例子:>>> a = np.array([2, 4, 6, 8, 10])>>> np.where(a > 5) # 返回索引(ar...

2020-02-06 22:25:32 201

原创 node和npm命令报错:Segmentation fault

重新安装node和npm即可,但是要保证之前的都删除干净。删除操作:sudo apt remove nodejs nodejs-legacy npm再用n命令找到系统里已经安装的所有nodejs版本,然后全部删除。保证系统里没有node, nodejs, npm, n这四个可执行命令, 如果还有就用rm删除。然后重新安装node即可:sudo apt install -...

2020-02-06 22:24:26 6597

原创 torch.nn.functional.normalize详解

torch.nn.functional.normalizetorch.nn.functional.normalize(input, p=2, dim=1, eps=1e-12, out=None)功能:将某一个维度除以那个维度对应的范数(默认是2范数)。v=vmax⁡(∥v∥p,ϵ)v = \frac{v}{\max(\lVert v \rVert_p, \epsilon)}v=max(...

2019-12-22 14:36:23 24238 8

原创 EOJ 3486 二分+哈希

传送门:点击打开链接读完题目之后有以下理解。1. 最后的答案应该是某一个后缀。比如原字符串是123654,那么答案就是654。2. 后导0是没有意义的,应该将其去掉。比如原字符串是123654000,那么答案还是654。读懂题目意思之后,就知道这道题目是一个求最大后缀问题。很容易这样想:找到最大的那个数字所对应的后缀不就行了吗?比如原字符串是123654,最大的数字是6,其对应的后缀是654。其实...

2018-07-08 18:18:50 751

原创 BZOJ - 4428 记忆化搜索

#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <set>using namespace std;typedef long long int LL;const LL INF = 1e18;const

2017-10-15 18:21:44 466

原创 HDU 5952 Counting Cliques 爆搜

题目      HDU 5952 分析      题目数据很小,可以考虑暴力搜索。为了防止重复,建立一个小编号点指向大编号点的图,这样就不会重复了,因为搜索出来的序列一定是递增的。       这道题目让我懂得了,有时候TLE,不要总想着改进算法,要先确定自己的代码没有任何问题才行。这道题目就是因为一个手误,TLE了,然后就在那里一直想着怎么剪枝。代码如下#include <algorithm>

2017-09-28 23:51:51 338

原创 HDU 6181 Two Paths 次短路

题目      HDU 6181 分析      裸的次短路,直接套k短路模板就行了。有兴趣的读者可以看我讲k短路的博客,是利用spfaspfa和A∗A^*算法实现的。链接:POJ 2449 A* + spfa求第k短路 。代码#include <cstring>#include <cstdio>#include <queue>using namespace std;typedef lon

2017-08-24 23:58:47 464

原创 HDU 6168 Numbers 思维

题目HDU 6168 分析官方题解 和HDU 6092很类似,不过区别在于6092那道题目可以取多个不同的数字组成一个新的数,所以要用0-1背包。这道题目只能取两个数字组成一个新的数,所以用一个mapmap维护能够组成的数字就行了,每找到一个新的数字,就遍历之前所有的数来更新mapmap。虽然代码看起来是三重循环,但是复杂度是O(M+N2)O(M+N^2)。代码#include <cstrin

2017-08-24 23:01:26 385

原创 HDU 6172 Array Challenge 找规律+矩阵快速幂

题目      HDU 6172 分析      这道题目一看就想到矩阵快速幂。可以先把hnh_{n}算出来,进而把bnb_{n},ana_{n}都算出来。但是发现一个问题,题目中是要求⌊an−−√⌋\lfloor\sqrt{a_{n}}\rfloor对1e9+71e^9+7取模之后的值。但是开根号没法取模啊,所以就要换个思路了。       把⌊an−−√⌋\lfloor\sqrt{a_{n}

2017-08-24 21:41:12 1254

原创 POJ - 2762 && HDU 6165 Tarjan缩点+dp最长路

题目      POJ 2762       HDU 6165 分析      最开始想的是拓扑排序,因为拓扑序列满足如果一个点u可以到v,那么u一定在v的前面。如果求出了拓扑序列,发现序列中u在v的前面,那么就可以认为u可以到达v了。      但是随后想到两个问题如果有环的怎么办呢,就不能求拓扑序列了。虽然这个图存在拓扑序列1-2-3,但是我们能仅仅因为1在2的前面就认为1可以到2吗?显然

2017-08-24 11:32:09 523

原创 HDU - 6170 Two strings dp

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-08-23 13:37:42 363 2

SDK:对话框,光标,字符串,位图,应用图标,语言

SDK:对话框,光标,字符串,位图,应用图标,语言

2017-06-10

代码:lab04.zip

lab04.zip

2017-06-09

pytesser_v0.0.1

OCR模块使用示例代码

2017-06-09

tesseract-ocr模块

tesseract-ocr模块

2017-06-09

pytesser_v0.0.1.zip

pytesser模块的使用示例代码

2017-06-09

SDK源代码exe文件

这是博客中代码的exe文件。因为源程序文件中资源种类太多,所以直接打包成exe。

2017-04-20

SDK程序源代码

SDK程序源代码

2017-04-17

N皇后解法总结

N皇后解法总结

2017-03-29

空空如也

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

TA关注的人

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