- 博客(32)
- 收藏
- 关注
原创 tensorboardX在远程服务器上的安装与可视化
1. 安装 tensorboardX是对tensorboard的封装,因此必须先安装tensorboard:pip install tensorboard然后再安装tensorboardX:pip install tensorboardX2. 使用 由于模型训练通常在远程服务器上进行,而服务器上没有可视化界面,无法直接查看tensorboard的结果,因此需要采用一些措施将服务器上的界面转发到本地,这里采用ssh端口转发的方式实现。 首先借助MobaXterm实现ssh端口转发:
2022-02-23 14:36:42
1896
原创 vscode-server离线安装
获取当前版本vscode的commit_id:Help -> About -> Commit根据commit_id下载对应版本的vscode-server:https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable将下载好的vscode-server-linux-x64.tar.gz放在~/.vscode-server/bin/${commit_id}目录下(没有则新建)将压缩包解压,.
2022-02-18 17:08:01
8041
原创 cv2.resize踩坑:图片通道顺序
在使用opencv-python中的cv2.resize()函数进行图片缩放时,输入参数数中的dsize,即输出图片的大小,顺序应为(w, h),和cv2.imread()读入图片的顺序相反,cv2.imread()读入图片的通道顺序为(h, w, c)。例如使用opencv处理一张宽1280,高1024的图片:import cv2dsize = (640, 640)img = cv2.imread("demo.jpg")print(img.shape)r = min(dsize[0]
2021-09-13 15:11:47
2671
2
原创 ImportError: cannot import name ‘XXX‘ from ‘XXXX‘的可能原因
出现“ImportError: cannot import name ‘XXX’ from ‘XXXX’”的一个可能原因是两个文件或两个包相互引用。
2021-08-25 16:25:09
3620
原创 pip更改默认镜像源
在很多环境下,pip默认的镜像源下载速度会很慢或者直接无法使用,这时候我们可以临时指定镜像源,如:pip install <package> -i <url>这样通过 −i-i−i 参数来临时指定下载的镜像源虽然能够解决问题,但每次加入过长的后缀十分麻烦。因此,我们需要修改pip的配置文件永久地更改pip的镜像源。pip的配置文件在linux系统中为:~/.pip/pip.conf在windows系统中为:C:\Users\{YourNanme}\AppData\Ro
2021-08-09 16:28:24
7392
1
原创 PyTorch多GPU模型保存和加载的一个注意事项-Unexpected key(s) in state_dict
用PyTorch加载已经保存好的模型参数文件时遇到一个bug:Unexpected key(s) in state_dict: “module.features. …”.,Expected “.features…”意思是从本地文件中加载模型的state_dict时,state_dict的key值不匹配。查了一些资料后,发现是PyTorch多gpu保存的问题,导致保存下来的state_dict中的key比原来都多了一个module,因此出现了上述这个问题。下面简单验证一下。import torch
2020-05-28 14:33:15
1817
原创 Python中的可迭代对象/迭代器/生成器辨析
暂时简单记录以下可迭代对象、迭代器和生成器,后续再完善。可迭代对象:实现了__iter__方法;迭代器:在可迭代对象的基础上实现了__next__方法,可通过next()对其中的元素进行调用。生成器:特殊的迭代器,可节省内存,只在元素被调用时才生成。...
2020-04-18 21:34:56
215
原创 Python中变量的赋值/浅拷贝/深拷贝的作用分析
关于Python中变量的赋值、浅拷贝和深拷贝,看了好几篇文章都没有理解得很清晰,所有自己通过一些简单的实验验证以下。 要想弄清楚赋值、浅拷贝和深拷贝的作用,首先要理解python中关于引用和对象的概念。以下面简单的代码为例:a = 2b = 2上面的代码中,2是一个对象,变量a和变量b都是2的一个引用(地址)。即,在python中,新建一个变量都是在为某个对象新增一个引用;如果多个...
2020-04-18 21:20:51
375
原创 排除使用PyTorch时的随机性
训练模型时,同样的超参,同样的参数初始化方式,但训练的结果却不一样,很可能的原因就是框架中的随机型导致,主要是random seed和cudnn带来的。排除random seed的随机性:torch.manual_seed(seed);torch.cuda.mannual_seed_all(seed);np.random.seed(seed);random.seed(seed);...
2020-04-13 17:15:32
1649
原创 PyTorch中池化层的padding和ceil_mode参数设置
在池化操作的接口中,padding和ceil_mode这两个参数会影响到输出特征图的大小。padding即对特征图大小进行扩充的像素数量;ceil_mode指明,当剩余的像素不足滤波器大小,是否仍对这些像素进行运算。对于池化操作来说,当stride为1时,希望输出与输入保持不变;当stride为2时,希望输出特征图的宽高均为输入的一半。下面以avg_pool2d讲解如何尽量简单达到上述目的:i...
2020-03-20 12:01:12
5210
原创 torch.optim.lr_scheduler源码和cosine学习率策略学习
torch.optim.lr_scheduler是PyTorch中负责调整学习率的模块,常和torch.optim.Optimizer配合使用。class _LRScheduler(object): def __init__(self, optimizer, last_epoch=-1): # 读取相应的Optimizer if not ...
2020-03-19 21:11:43
6201
原创 torch.optim.optimizer源码阅读和灵活使用
torch.optim.optimizeroptimizer是PyTorch更新模型参数的工具。PyTorch先定义一个基类Optimizer来实现优化器的基本功能,再用子类实现每一个优化算法相应的优化过程,如SGD、Adam等。
2020-03-18 14:46:51
3700
1
原创 python获得变量的类名
python可以通过__name__的特殊方法来获得所有类的对应类名。如:class A(object): passprint(A.__name__) # A但如果向获得某一变量所属的类的类型,用该方法是行不通的:a = A()print(a.__name__)此时,编译器就会报错“AttributeError: ‘A’ object has no attribute ...
2020-03-17 17:46:56
2869
原创 torch.nn.Module和torch.nn.functional的区别
nn.module和nn.functional是torch.nn的两个模块,这两个模块都能实现神经网络的卷积、池化等操作,但又有本质的区别。nn.Module是类,除了要进行相关的计算,还要对module中的参数等属性进行管理;nn.fuctional是函数,只进行相关的计算。下面以nn.Linear和nn.functinal.linear来学习两者的区别:nn.Linear:class L...
2020-02-11 21:02:18
3424
原创 torch.nn.Module源码学习
nn.Module是使用pytorch进行神经网络训练的主要载体,是所有网络的基类。首先看一下它的构造函数: def __init__(self): """ Initializes internal Module state, shared by both nn.Module and ScriptModule. """ tor...
2020-02-11 19:53:18
1390
原创 pytorch中tensor的基本维度变换:transpose/permute/t/cat/chunk/split/stack/squeeze/unsqueeze/expand/repeat
直接从代码中学习tensor的一些维度变换操作:import torchtorch.manual_seed(2020)x = torch.rand(1, 2, 3)print(x)# tensor([[[0.4869, 0.1052, 0.5883],# [0.1161, 0.4949, 0.2824]]])print(x.view(-1, 3).size()...
2020-02-07 21:27:42
1021
原创 pytorch中tensor的基本数学运算
直接在代码中认识torch.Tensor的基本数学运算:import torchtorch.manual_seed(2020) # cpu的随机数种子# torch.cuda.manual_seed() # 当前gpu的随机数种子# torch.cuda.manual_seed_all() # 所有gpu的随机数种子# 创建tensorprint('create tensor:...
2020-02-07 16:23:16
4212
原创 python中的namedtuple学习
namedtupe(具名元组)是tuple(元组)的一种变形,却具有其特殊的性质。可将namedtuple看成一种定义类的数据结构,与class类似,但这种数据结构的类只有类成员,没有类方法。下面来看具体的使用:from collections import namedtuple# City = namedtuple('City', ['name', 'country', 'popula...
2020-02-06 17:07:38
246
原创 torch.nn.Parameter理解
Pytorch官网对torch.nn.Parameter()的解释:torch.nn.Parameter是继承自torch.Tensor的子类,其主要作用是作为nn.Module中的参数使用。它与torch.Tensor的区别就是nn.Parameter会自动被认为是module的可训练参数,即加入到parameter()这个迭代器中去;而module中非nn.Parameter()得普通te...
2020-02-05 11:13:04
44153
2
原创 pytorch的自动求导和hook技术简介
在Pytorch的计算图中,由用户手动创建的tensor称为叶子节点,默认不计算梯度,即requires_grad=False。由函数(Function)计算得到的tensor是非叶子节点,requires_grad由参与计算的tensor决定。在整个计算图中,只要有一个节点的requires_grad=True,则所有依赖该节点的节点的requires_grad均为True。tensor.gr...
2020-02-01 01:21:39
1484
原创 ImportError: DLL load failed: The operating system cannot run %1.
使用anaconda安装pytorch时,遇到下面的问题:ImportError: DLL load failed: The operating system cannot run %1.ImportError: DLL load failed: The operating system cannot run %1.解决方法:conda install -c defaults intel-o...
2020-01-30 23:14:32
739
原创 理论推导RNN梯度消失和梯度爆炸的原因
RNN梯度消失和梯度爆炸的原因 RNN的提出是为了解决网络无法利用历史信息的问题,但由于RNN具有梯度消失和梯度爆炸的问题,导致RNN不能存储长期记忆。网络结构 首先来看RNN的结构,如下图1所示: 上图的结构很好理解,xtx_{t}xt为网络输入,AAA为隐藏层,hth_{t}ht为网络输出。既然我们想利用之前的历史信息,那我们就将网络在上一时刻的输出保存下来,作为当前时刻的...
2019-11-28 17:40:09
2369
1
原创 在openai/gym中使用自己的环境
gym是openai推出的强化学习框架,它提供了丰富的接口给开发者使用,再结合其开源的常见算法实现openai/baselines,能够使开发者方便地各种强化学习算法应用到自己的需求中。 环境是强化学习算法中的重要一环,环境如何对agent的动作进行反馈,state和reward的更新直接影响了agent后续的工作,因此针对不同的需求我们需要定义自己的环境。下面就主要介绍如何在gym中使用...
2019-09-20 16:51:51
9326
1
转载 C++类中静态变量和静态方法使用介绍
转自:https://www.cnblogs.com/sixue/p/3997324.html 最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊,不明白为什么类中要是用静态成员变量.于是在网上搜集了一些资料,自己再稍微总结下。静态成员的概念: ...
2019-04-12 09:24:04
1897
1
转载 C++中虚析构函数的作用及其原理分析
C++中的虚析构函数到底什么时候有用的,什么作用呢。 一.虚析构函数的作用 总的来说虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的。也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的.我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说...
2019-04-05 21:04:04
990
转载 C++虚函数的实现机制——虚函数表
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是...
2019-04-04 10:56:24
499
原创 LeetCode总结:2Sum/3Sum/4Sum问题
K Sum问题: 给定一个数组nums和一个实数target,在数组nums中给出所有的K个数,使K个数之和为target。1. LeetCode 1——2 Sum解法1: 暴力求解:先固定一个数,然后遍历数组,找到另一个数,使两数之和为target。vector&amp;amp;amp;amp;lt;int&amp;amp;amp;amp;gt; twoSum(vector&amp;amp;amp;amp;lt;int&amp;
2019-02-19 17:02:44
320
原创 C++引用的使用场景和底层实现
什么是引用: 引用(referene)是一种复合类型,即基于其他数据类型的类型(指针亦是一种复合类型)。引用实质是给变量起了一个别名,而不是一个实体的类型,所以编译器不会给引用分配内存。同时,对引用的操作等效于对原变量的操作。定义一个引用: 新建一个引用,在变量名前加上声明符&amp;amp;amp;amp;amp;amp;amp;amp;即可。引用必须被初始化,即一个引用必须明确其引用的是谁。int a = 1024;int &amp;amp;amp;a
2019-01-24 22:35:33
1244
原创 C++动态创建二维数组和二维容器
动态创建二维数组: 对于一个二维数组p[m][n],将其看成是有m个元素的数组,每个元素都是一个有n个元素的数组。分层次对其进行内存分配。 int m, n; cout << "Please input the dimension of the array : "; cin >> m >> n; int **p = new int*[m]; //...
2019-01-24 21:37:27
4632
转载 CSDN如何转载别人的文章
对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间里面,当然有人会说我们可以收藏博客啊,就不需要转载,(⊙o⊙)… 也对。。实现 因为我自己当初想转载的时候却不知道该怎么转载,所以学会了之后就把方法写出...
2019-01-15 21:43:10
486
原创 常见排序算法的基本原理、代码实现和时间复杂度分析
一、插入排序1、原理: 插入排序将一个位置数组seq分为两个部分:已排序的部分seq1和未排序的部分seq2。程序依次遍历seq2中的元素seq2[i],在seq1中寻找合适的位置插入。2、实现:void InsertionSort(vector&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;int&
2018-10-01 20:49:37
3200
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人