
编程
文章平均质量分 71
编程
呆呆象呆呆
这个作者很懒,什么都没留下…
展开
-
Python调用C++
python被称为胶水语言,其优势是能够粘结各种不同的语言。同时,python有着更大的“亲民性”,很容易进行开发。但是,python最大的问题就是。通常可以用CUDA或者C++对一个python程序进行加速,加速策略如下:大规模算术运算、矩阵运算等过程用底层语言编写,python只负责传参和处理结果数据;十分常用的函数,我们可以用C++写成“算子”,然后python调用算子即可,如边缘检测的Sobel算子;原创 2022-12-12 19:37:06 · 9801 阅读 · 5 评论 -
C++的构造函数的作用:初始化类对象的数据成员
即类的对象被创建的时候,编译系统对该对象分配内存空间,并,完成类成员的初始化。C++的构造函数可以有多个,创建对象时编译器会根据传入的参数不同调用不同的构造函数。构造函数的特点以类名作为函数名,无返回类型。...原创 2022-07-23 19:54:57 · 2304 阅读 · 0 评论 -
小端格式和大端格式(Little-Endian&Big-Endian)
字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如如果C/C++中的一个int型变量a的起始地址是&a=0x100,那么a的四个字节将被存储在存储器的0x100,0x101,0x102,0x103位置。不同的CPU有不同的字节序类型,最常见的有两种将低序字节存储在起始地址(低位编址)Big-Endian将高序字节存储在起始地址(高位编址)举例说明如下图。...原创 2022-07-23 16:53:40 · 5704 阅读 · 0 评论 -
C++ namespace
所谓命名空间,实际上就是一个由程序设计者命名的内存区域。程序设计者可以根据需要制定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。{inta;doubleb;}namespace是定义命名空间所必须写的关键字,AA是自己制定的命名空间的名字。如果在程序中要使用a和b,必须加上命名空间名和作用域分辨符,如AAa,AAb,这种用法称为命名空间限定。命名空间的作用是建立一些互相分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。......原创 2022-07-19 22:35:02 · 328 阅读 · 13 评论 -
C++内联函数
C++内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字inline,在调用函数之前需要对函数进行定义。在类定义中的定义的函数都是内联函数,即使没有使用inline说明符。...原创 2022-07-18 23:11:32 · 947 阅读 · 2 评论 -
C++中常量、引用、指针、常量指针、指针常量、常量引用、顶层常量与底层常量
主要问题哪个是指针不能变?哪个是指针指向的对象不能变?常量常量const是constant的缩写,本意是不变的,不易改变的意思。const在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。加了const修饰的变量,一经定义值永远不能改变。通常我们用在一些定值的声明定义上,比如某缓冲区的大小、某个最大值最小值等等。const float MaxLenth = 100.0f;如果你试图在声明定义以外的范围内修改该变量的值,是不被允许的,通常编译器就会检查出错误。举原创 2022-05-19 20:19:14 · 806 阅读 · 0 评论 -
C++头文件和cpp文件的原理
1 C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。.cpp文件被称作C++源文件,里面放的都是C++的源代码.h文件则被称作C++头文件,里面放的也是C++的源代码,头文件不用被编译C++语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次原创 2022-05-18 15:48:27 · 6952 阅读 · 2 评论 -
python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明
0 总述主要介绍可迭代对象(iterable)、迭代器(iterator)、生成器(generator)。迭代是python最强大的功能之一,是访问集合元素的一种方法。迭代的概念迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。1 可迭代对象(iterable)1.1 定义介绍在python中, 某对象实现__iter__()方法或者实现__getitem__()方法而且其参数从原创 2021-08-28 18:17:43 · 1823 阅读 · 0 评论 -
python中yield的用法(生成器的讲解)
0 理解说明功能1:把yield看做return。就是在程序中yield处返回某个值,返回之后程序就不再往下运行了。他们都在函数中使用,并履行着返回某种结果的职责。功能2:同时还是一个生成器generator,有return的普通函数直接返回所有结果,程序终止不再运行,并销毁局部变量;而有yield的函数则返回一个可迭代的生成器generator对象,你可以使用for循环或者调用next()方法,send()方法遍历生成器对象来提取结果。1 举2个例子说明yield生成迭代器:python生成器原创 2021-08-26 21:40:50 · 23753 阅读 · 10 评论 -
python中reduce的用法
1 概述reduce()函数会对参数序列中元素进行累积。语法:reduce(function, iterable[, initializer])参数:function函数,有两个参数iterable可迭代对象initializer可选,初始参数操作:函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用function 函数运算,最后得到一个结果。原创 2021-08-26 16:04:00 · 6951 阅读 · 2 评论 -
python中filter的用法
0 概述filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。语法:filter(function, iterable)参数:接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新列表中。function判断函数。iterable可迭代对象。返回值:返回列表。注意:Python2.7返回列表Python3.x返回迭代器对象filter()函原创 2021-08-26 15:41:40 · 7079 阅读 · 0 评论 -
python中map的用法
0 语法描述map()会根据提供的函数对指定序列做映射。语法:map(function, iterable, ...)参数:function函数iterable一个或多个序列第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表。注意:map()函数返回一个惰性计算lazily evaluated的迭代器iterator或map对象。就像zip函数是惰性计算那样。不能通过index访问map对象的元素,也不能使用l原创 2021-08-26 14:56:00 · 16650 阅读 · 1 评论 -
python中lambda的用法
0 概述匿名函数,顾名思义即没有名称的函数,和关键字def定义的函数的最大区别在于匿名函数创建后返回函数本身,即匿名函数不需要return来返回值,表达式本身结果就是返回值,而def创建后则赋值给一个变量名,在Python中,关键词lambda通常用来创建小巧的,一次性的匿名函数对象。以下是匿名函数lambda表达式的形式:lambda arg1,arg2,.....argn:expressionarg1,arg2……argn为在表达式中需要使用的变量。可以有任意数量的参数.以下为一些lambda原创 2021-08-26 14:07:16 · 3608 阅读 · 0 评论 -
Pytorch网络训练流程的作用原理:源码分析optimizer.zero_grad()loss.backward()optimizer.step()
常见参数训练流程的作用原理1 总述在用pytorch训练模型时,通常会在循环epoch的过程中,不断循环遍历所有训练数据集。依次用到optimizer.zero_grad(),loss.backward()和optimizer.step()三个函数,如下所示:model = MyModel()criterion = nn.CrossEntropyLoss()optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9原创 2021-08-25 10:52:53 · 3715 阅读 · 3 评论 -
Pytorch中 类Parameter的解析,类内成员函数.parameters()的源码分析,参数集合的获取,参数的注册赋值源码分析
类型torch.nn.Parameter官方解释Parameters是Variable的子类。Variable的一种。Paramenters和Modules一起使用的时候会有一些特殊的属性,即:当Paramenters赋值给Module的属性的时候,他会自动的被加到Module的参数列表中,也就是会出现在parameters()迭代器中。常被用于模块参数module parameter。将Varibale赋值给Module属性则不会有这样的影响。 这样做的原因是:我们有时候会需要缓存一些临时的状态原创 2021-08-25 09:45:49 · 4553 阅读 · 0 评论 -
Pytorch实现网络部分层的固定不进行回传更新
实际问题Pytorch有的时候需要对一些层的参数进行固定,这些层不进行参数的梯度更新问题解决思路那么从理论上来说就有两种办法优化器初始化的时候不包含这些不想被更新的参数,这样他们会进行梯度回传,但是不会被更新将这些不会被更新的参数梯度归零,或者不计算它们的梯度思路就是利用tensor的requires_grad,每一个tensor都有自己的requires_grad成员,值只能为True和False。我们对不需要参与训练的参数的requires_grad设置为False。在optim参数模原创 2021-08-24 21:30:02 · 3842 阅读 · 0 评论 -
Pytorch不同层设置不同学习率
1 主要目标不同的参数可能需要不同的学习率,本文主要实现的是不同层中参数的不同学习率设置。尤其是当我们在使用预训练的模型时,需要对一些除了主干网络以外的分支进行单独修改并进行初始化,其他主干网络层的参数采用预训练的模型参数进行初始化,这个时候我们希望在进行训练过程中,除主干网络只进行微调,不需要过多改变参数,因此需要设置较小的学习率。而改正后的其它层则需要以较大的步子去收敛,学习率往往要设置大一点。2 针对全局的统一学习率设置根据你选择的优化器的类把具体设置的lr作为可选参数的一部分传入到新建的优化原创 2021-08-24 20:54:23 · 18885 阅读 · 3 评论 -
pytorch 动态调整学习率,学习率自动下降,根据loss下降
0 为什么引入学习率衰减?我们都知道几乎所有的神经网络采取的是梯度下降法来对模型进行最优化,其中标准的权重更新公式:W+=α∗ gradient W+=\alpha * \text { gradient }W+=α∗ gradient 学习率 α\alphaα 控制着梯度更新的步长(step),α\alphaα 越大,意味着下降的越快,到达最优点的速度也越快,如果为000,则网络就会停止更新学习率过大,在算法优化的前期会加速学习,使得模型更容易接近局部或原创 2021-08-23 23:17:06 · 38506 阅读 · 0 评论 -
python代码实现:视频转换终端字符,输出字符代码视频(python实现输出多行刷新)
准备需要安装curses库windows安装方法:需要在官网上下载whl文件linux安装方法:直接使用pip在线安装curses官网教程推荐一个在线视频转gif的网址代码结果展示代码import timeimport cv2import osimport shutilfrom PIL import Imageimport cursesimport random # 视频抽帧保存def video2image(video_path): if not os.path原创 2021-08-22 11:25:40 · 1751 阅读 · 0 评论 -
Pytorch 复制替换网络中的部分参数,网络参数的定向赋值
主要目标尝试复制网络中的部分参数到另一个网络中尝试将网络的部分参数做定向赋值实验代码最核心的部分testnet2.state_dict()["net1.weight"].copy_(testnet.state_dict()["net1.weight"]) 或者testnet2.state_dict()["net1.weight"].copy_(testnet.state_dict()["net1.weight"].clone()) 或者testnet2.state_dict()["net1原创 2021-08-17 23:10:14 · 7003 阅读 · 4 评论 -
Pytorch 模型 查看网络参数的梯度以及参数更新是否正确,优化器学习率设置固定的学习率,分层设置学习率
主要目标有的时候想看一下设置了优化器和学习率之后是否按照我设置的样子去进行更新,所以想查看一下网络参数中的及各相关变量:更新前的值优化器中的学习率计算出loss之后的梯度值更新后的值有了这几个值,可能在之后我调试网络结构的过程当中能确保代码没有问题,或者检查中间的结果实验代码1:查看梯度以及参数更新的问题import torch import torch.nn as nnimport numpy as npimport torch.optim as optimfrom torch原创 2021-08-17 22:32:03 · 36915 阅读 · 5 评论 -
Pytorch查看网络参数和网络内变量名称
主要目标打印如下信息网络结构网络每一层变量的名字网络每一层变量的具体每一个参数因为有的时候直接整个网络打印的话(1)是会很难找(2)当参数很多的时候,有的时候会缩略起来看不到那个参数实验代码import torch import torch.nn as nnimport numpy as npimport osclass NET(nn.Module): def __init__(self): super(NET, self).__init__()原创 2021-08-17 21:16:17 · 3377 阅读 · 0 评论 -
代码debug:RuntimeError: You must implement the backward function for custom autograd.Function.
RuntimeError: You must implement the backward function for custom autograd.Function.问题原因问题解决主要原因是自己写的loss梯度 回传函数有问题参考一下这一篇blog学习了一下怎么写自己的loss和网络梯度回传一开始的错误代码是这样的没有加上@staticmethod加上后就可以用了...原创 2021-07-22 15:02:18 · 2923 阅读 · 3 评论 -
Python 运行时出现 UserWarning: semaphore_tracker 问题解决(实际上是忽略方法)
最近在跑代码的时候总是会遇到这个错误,明明是UserWarning,但是程序会停止运行,错误提示为multiprocessing/semaphore_tracker.py:144: UserWarning: semaphore_tracker: There appear to be 4 leaked semaphores to clean up at shutdown len(cache))查了很多资料,这个问题似乎很早之前就有,最早能找到的是在2013年,但是没有什么很好的解决方法,最终发现,需原创 2021-07-10 09:52:51 · 10712 阅读 · 3 评论 -
查看GPU信息,设置指定的GPU,pytorch移动到指定GPU操作
1、查看设备的使用情况1.1 gpu方法一:nvidia-smi查询当前gpu情况nvidia-smi定时更新gpu情况(会在终端不断地刷新)nvidia-smi -l方法二:gpustat安装pip install gpustat查询当前gpu情况(cpu代表的分别是color、process、user)gpustat -cpu 注意:定时刷新监控watch -n 1 gpustat -cpu或者watch -n 1 nvidia-smi1.2 npu查原创 2021-06-24 10:35:36 · 2820 阅读 · 0 评论 -
【编程58--代码share&debug17】IOError: [Errno 5] Input/output error 问题解决
问题BugIOError: [Errno 5] Input/output error问题原因后经过排查找到了问题,这是因为我在程序中有 print 语句,当我把远程 ssh 退出后,就相当于把它的 shell 关闭了,没有了 shell 的进程 print 就没有地方输出字符,不能“写”到屏幕上了,所以就会报一个 I/O 错误解决方案使用后台运行,将输出重定向到除屏幕以外的文件作为日志具体实现可以看一下这一篇blogLast、参考文献关于python:python – 防止IOError:原创 2021-06-23 16:35:41 · 3354 阅读 · 0 评论 -
python调试过程中多颜色输出
Python 解决控制台输出颜色目的在python开发的过程中,经常会遇到需要打印各种信息。海量的信息堆砌在终端中,就会导致信息都混在一起,降低了重要信息的可读性。这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了。当然了,控制台的展示效果有限,并不能像前段一样炫酷,只能做一些简单的设置。不过站在可读性的角度来看,已经好很多了。主要语法主要是通过一个固定格式的字符串进行控制#======linux======# 颜色控制开始print('\033[显示方式编号;前景色编号;原创 2021-06-01 15:34:18 · 2191 阅读 · 1 评论 -
tqdm包进度条长度固定,前后缀步长配置,设置自定义显示内容
呆呆象呆呆的所有博客目录1、–tqdm包安装pip install tqdm2、引用引用包的时候注意细节,不是直接引用,而是引用里面的一个类from tqdm import tqdm或者from tqdm import trange3、使用方法1:tpdm和trange最简单方法主要方式1:使用tqdm是使用tqdm封装任意迭代器代码1演示如下(包装range)import timefrom tqdm import tqdmfor i in tqdm(range(10)):原创 2021-05-26 17:14:10 · 22392 阅读 · 10 评论 -
【编程55--代码share&debug14】Tensorflow,Pytorch 出现 ‘Tensor‘ object is not callable解决办法
呆呆象呆呆的所有博客目录Tensorflow,Pytorch 出现 ‘Tensor‘ object is not callable解决办法主要可能的原因:**出现问题的原因1:**可能是在你想调取张量的属性的时候,而写成了函数形式# 原因1对应的代码import torchtensor = torch.zeros((3,3))print(tensor.shape)tensor()**出现问题的原因2:**可能是你想要索引的时候用的是小括号# 原因2对应的代码impo原创 2021-05-22 16:50:06 · 4530 阅读 · 3 评论 -
【编程54--python学习28】Namespace与dict的相互转换,保存Namespace,以字典形式传入argparse的参数
Namespace转换成dictimport argparse# 创建 ArgumentParser() 对象parser = argparse.ArgumentParser()# 调用 add_argument() 方法添加参数parser.add_argument("-a")# 使用 parse_args() 解析添加的参数args = parser.parse_args()# 可以打印出最终存储的参数空间属性print(args)# 打印参数空间中的变量print(args.a)原创 2021-05-16 19:53:47 · 4183 阅读 · 1 评论 -
【编程53--python学习27】使用format格式化字符串的过程中,输出大括号问题解决
需要使用{{或者}} 代替原本的{或者}举例如下例子1正常的format语句print("{}".format(100))例子2 想要通过正常方式输出{或者}会报错print("{} and want to print another {hhh}".format(100))例子3 使用正确的方法进行输出print("{} and want to print another {{hhh}}".format(100))例子4 在没有format的语句中使用双大括号就会正常打出两个大原创 2021-05-16 19:17:41 · 2717 阅读 · 0 评论 -
【代码share&debug13】numpy读取文件ValueError: Object arrays cannot be loaded when allow_pickle=False报错
问题描述读取npy文件时出现如下报错:ValueError: Object arrays cannot be loaded when allow_pickle=False主要原因numpy版本太高。Numpy 1.16.3发行版本中说明:“函数np.load()和np.lib.format.read_array()采用allow_pickle关键字,现在默认为False以响应CVE-2019-6446 < nvd.nist.gov/vuln/detail / CVE-2019-6446原创 2021-04-25 16:42:54 · 1489 阅读 · 0 评论 -
【代码share&debug12】python数字前面补零
一、sting.zfill()函数正数前面补零number = 123number_fill_string = str(number).zfill(5)print(number_fill_string)负数前面补零number = -123number_fill_string = str(number).zfill(5)print(number_fill_string)小数前面补零number = 123.1number_fill_string = str(number).zf原创 2021-04-25 10:49:05 · 1685 阅读 · 0 评论 -
【从矩阵到图像的类型转换5】:matplotlib库与Numpy库数据转换
matplotlib库与numpy库数据的相互转换matplotlib库中读取图片后直接就是numpy中np.array数据import matplotlib.pyplot as pltimport matplotlib.image as mpimgimport numpy as npimg_matplotlib = mpimg.imread('./1.png')print("img_matplotlib的类型:",type(img_matplotlib))print("img_matplot原创 2021-04-24 15:37:50 · 2135 阅读 · 0 评论 -
【从矩阵到图像的类型转换4】:PIL库Image类型与Numpy类型转换
一、PIL库读取图片后类型示例from PIL import Imageimg=Image.open("./1.png")print("类型:",type(img))print("类型名称:",img.__class__.__name__)# 显示和用户交互import matplotlib.pyplot as pltplt.imshow(img)plt.show()二、PIL库读取图片后Image类型转换成numpy为了方便显示长宽我们换一张长宽不相等的图from PIL im原创 2021-04-24 15:13:31 · 6699 阅读 · 1 评论 -
有道词典生词本到excel的装换
生词本的导出编码转换并且写入excelimport codecsimport xlwtintlist = ['1','2','3','4','5','6','7','8','9','0']worddict = {}#{'word':[word,soundmark,[mean]]}meanlist_ = []meanlist = []with open('./zzq.t...原创 2019-04-24 00:39:34 · 12120 阅读 · 2 评论 -
TensorFlow查找网络中所有参数的数量
tensorflow统计网络参数量_feynman233的博客-优快云博客如何计算 LSTM 的参数量 - 知乎原创 2021-03-28 09:55:05 · 2343 阅读 · 0 评论 -
【从矩阵到图像的类型转换3】:单维数据、List、Numpy.ndarray、torch.Tensor等的相互转换
一、单个数据转换为其他数据格式1.1 单个数据 -> list直接在数据上进行列表化操作,或者直接接入已经有的列表语法:list_name = [single_data] 或者 list_name.append(single_data)1.2 单个数据 -> numpy.ndarray直接使用初始化语法就可以语法:numpyarr_name = np.array(single_data)举例:import numpy as npsingle_data = 100num原创 2021-03-19 10:43:23 · 2119 阅读 · 2 评论 -
【从矩阵到图像的类型转换2】:Numpy的类型、数据类型以及数据类型间的转换、dtype数据类型对象的实例化
一、numpy中的数据类型一些更加详细的讲解可以参考如下链接1.0 解释说明numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用,它描述了数据的以下几个方面:数据类型(整数、浮点或者 Python 对象)数据大小(例如, 整数使用多少个字节存储)字节序(小端或大端)在结构化类型的情况下,字段的名称,每个字段的数据类原创 2021-03-18 16:22:05 · 2599 阅读 · 3 评论 -
【从矩阵到图像的类型转换1】:Pytorch中tensor的类型、数据类型以及数据类型间的转换
一、Pytorch中tensor的类型与数据类型torch.Tensor是一种包含元素的多维矩阵,但这些元素属于单一数据类型元素(与list不同,list可以在同一序列中存储不一样类型的元素)。1.0 默认类型与数据类型torch.Tensor是默认的tensor类型(torch.FlaotTensor)的简称,并且默认放置于CPU上,使用该类型声明的时候会生成类型为torch.FloatTensor,数据类型为torch.float32的数据。torch.ensor是默认的tensor类型(tor原创 2021-03-18 09:51:58 · 3232 阅读 · 0 评论