自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解决ScriptModule不能调用flattern_parameters()的问题

使用TorchScript,如果直接再forward里调用flattern_parameters()会遇到报错。因为flattern_parameters()只能在GPU上使用, 所以可以这样写。

2022-11-09 14:08:21 145

原创 第3章 字典和集合

模块中有和两个抽象基类, 为和其他类似的类型定义形式接口.非抽象映射类型一般不直接继承这些抽象基类, 他们会直接对或进行扩展. 这些抽象基类的主要作用是作为形式化的文档, 它们定义了构建一个映射类型所需要的最基本的借口.True标准库里的所有映射类型都是利用来实现的, 他们的共同限制是可散列的数据类型才能作为映射里的键.原子不可变数据类型(,和数值类型)都是可散列类型, 也是可散列的. 元组中的所有元素都是可散列类型时, 元组是可散列的.字典推导可以从任何以键值对作为元素的可迭代对象中构建出字典.{

2022-07-13 15:59:17 112

原创 第2章 序列构成的数组

容器序列存放的是它们所包含的任意类型的对象的引用, 包括, , 等.扁平序列存放的是值而不是引用, 是一段连续的内存空间, 包括, , , , 等.可变序列: , , , , 不可变序列: , , 列表推导是构建列表的快捷方式.通常的原则是, 只用列表推导来创建新的列表, 并且尽量保持简短.map/filter组合不一定比列表推导要快.由列表推导可以生成两个或以上的可迭代类型的笛卡尔积.如果想要生成其它类型的序列, 可以使用生成器表达式.生成器表达式背后遵守了迭代器协议, 可以逐个地产出元素,

2022-07-12 14:14:52 165

原创 第一章 python数据模型

使用如下代码可以创建一个纸牌类上述代码中, 可以用来创建一张卡牌, 且其属性可以直接获取. 例如重写可以使用来获取一叠牌的张数重写 可以使用索引取出特定的牌, 例如利用 可以实现随机选择一张牌, 因为它已经是一个序列.也可以使用切片可以进行迭代和反向迭代可以用判断是否属于可以对其进行升序排序, 这里花色按照 c,d,h,s, 点数从2到A, 也就是2C, 2D, … , AH, AS.1.2 如何使用特殊方法特殊方法是被Python解释器调用的, 而不需要主动去调用. 通过内置的函

2022-07-10 16:21:08 156

原创 使用python socket库进行主机和虚拟机连接

主机:windows系统虚拟机:ubuntu基本的代码在csdn上都能找到,我参考的是这一篇.但在实现的过程中遇到了一个问题, 无论是虚拟机作为服务端还是主机作为服务端, 连接是都会遇到 errno 110, 即超时的错误.但在我使用网络调试助手作为服务端和客户端时, 主机和虚拟机都能正常与网络调试助手连接.查询了很多网页之后, 总结出了解决方法. 即将ubuntu对应的端口打开即可.可以使用将8080改成想要开放的端口即可.保存方法参考文章: ubuntu打开端口...

2022-06-29 13:38:20 739

原创 解决A3C训练中网络参数都为0的问题

问题:在训练A3C的过程中, 本来想用cuda进行多进程训练, 即import torchimport torch.multiprocessing as mpglobal_net = Net()global_net.cuda()global_net.share_memoryclass Worker(mp.Process): def __init__(net): super().__init__() self.net = global_net def run(): ....

2022-05-13 18:05:54 492 1

原创 《机器学习》学习笔记:线性代数

矩阵与向量(Matrices and Vectors)A=[1402191137182194914371471448]A=\begin{bmatrix}1402&191\\1371&821\\949&1437\\147&1448\\\end{bmatrix}A=⎣⎢⎢⎡​14021371949147​19182114371448​⎦⎥⎥⎤​矩阵的维数即行数×列数矩阵项AijA_{ij}Aij​表示第iii行,第jjj列元素向量是一种特殊的矩阵,一般都是

2021-06-10 20:40:33 99 1

原创 《机器学习》学习笔记:单变量线性回归

模型介绍预测房价是一个回归问题。假设训练集如下图所示mmm代表训练集中实例的数量xxx代表特征/输入变量yyy代表目标变量/输出变量(x,y) 代表训练集中的实例(x(i),y(i))(x^{(i)},y^{(i)})(x(i),y(i)) 代表第iii个观察实例hhh代表学习算法的解决方案或函数也称为假设(hypothesis)hhh是从xxx到yyy的映射一种可能的表达方式为:hθ(x)=θ0+θ1xh_{\theta}(x)=\theta_0+\theta_1xhθ​(x)

2021-06-10 20:31:57 105

原创 《机器学习》学习笔记:无监督学习

在无监督学习中,我们已知的数据。看上去有点不一样,不同于监督学习的数据的样子,即无监督学习中没有任何的标签或者是有相同的标签或者就是没标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。你能从数据中找到某种结构吗?针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法。事实证明,它能被用在很多地方。。...

2021-06-10 20:28:06 89

原创 《机器学习》学习笔记:监督学习

监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。房价预测在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。比如你朋友那个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。回归这个词的意思是,我们在试着推测出这一系列连续值属性。乳腺癌预测另一个例子。假设说你想通过查看病历来推测乳腺癌良性与否,假如有人检测出乳腺肿瘤,恶性肿瘤有害并且十分危险,而良性的肿瘤危

2021-06-10 20:26:59 170

原创 markdown测试

markdown常用语法文章目录分割线加粗、斜体、删除、高亮列表缩进行内代码超链接和图片表格公式上下标分式开方空格累加、累乘、积分累加累乘积分括号圆括号方括号花括号尖括号多行对齐居中左对齐方程组矩阵圆角矩阵方角矩阵行列式特殊字符公式编号与引用零碎的重要语法VSCode 快捷键原生快捷键插件增加的快捷键分割线789加粗、斜体、删除、高亮重点加粗斜体删除线高亮快捷键加粗 ctrl + b斜体 ctrl + i列表无序列表嵌套无序列表嵌套无序列表有序列表1嵌套

2021-06-10 20:21:49 79

原创 《算法笔记》学习笔记(15):BFS和DFS

《算法笔记》学习笔记(15):BFS和DFS很久没有更新《算法笔记》的内容了,STL库除了vector之外的容器都不是很复杂书中第七章介绍的栈、队列和链表的应用在以前学习数据结构时学习过,所以只对我掌握不太好的DFS和BFS做一下笔记。目录《算法笔记》学习笔记(15):BFS和DFSDFS背包问题问题思路完整代码选数问题问题思路完整代码总结BFS模板求块问题问题思路完整代码迷宫问题问题思路完整代码总结DFSDFS(Depth First Serach),深度优先搜索就是在每次搜索时往最深的哪一条路走

2021-05-15 17:13:39 93

原创 使用C++和opencv实现字符画视频

这个程序的核心思想是将视频的每帧作为图片处理,对每个像素的像素值,映射到某一个字符,再将所有的字符形成字符串,将每一帧对应的字符串打印出来,就可以在控制台看到动画#include <opencv2/opencv.hpp>#include <iostream>#include <Windows.h>#include<stdio.h>#include<stdlib.h>#include <mmsystem.h>#pragma

2021-05-14 16:37:51 1123 4

原创 《算法笔记》学习笔记(14):vector

vector是STL库中的一个容器,使用前要加上#include<vector>using namespace std;vector可以看作是一个变长数组,它的定义方式是vector<typename>name;元素的访问和数组类似,可以直接用下标访问,也可以用迭代器访问vectoe<typename>::iterator it;访问时和指针类似,*(it)常用函数push_back(x):在vector后面添加一个元素xpop_back():

2021-04-21 21:43:04 75

原创 《算法笔记》学习笔记(13):数学问题

1019 数字黑洞 (20 分)给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 =

2021-04-17 23:00:14 132

原创 《算法笔记》学习笔记(12):其他高效技巧与算法

1.打表打表是一种典型的空间换时间的技巧,一般指将所有可能需要用到的结果事先计算出来,这样后面需要用到时就可以直接查表获得。打表常见的用法有如下几种:在程序中一次性计算出所有需要用到的结果,之后的查询直接取这些结果;在程序B中分一次或多次计算出所有需要用到的结果,手工把结果写在程序A的数组中,然后在程序A中就可以直接使用这些结果;对一些感觉不会做的题目,先用暴力程序计算小范围数据的结果,然后找规律,或许就能发现一些蛛丝马迹。2.活用递推1040 有几个PAT (25 分)字符串 APPAPT

2021-04-06 11:58:01 80

原创 《算法笔记》学习笔记(11):two pointers

two pointers更倾向于是一种编程技巧,而非一种算法。从一个例子引入:一个递增的正整数序列,查找两个数a和b,设的他们的和为m。若直接使用二重循环枚举,显然时间复杂度为O(n2),同时也会产生大量无效枚举,效率低下。若采用two pointers的方法,令下标i初值为0,j初值为n-1,通过移动i,j来寻找,直到i≥j成立。移动过程中有一下三种情况:1.若a[i]+a[j]==m,因为序列递增,则i++,j–2.若a[i]+a[j]>m,j–3.若a[i]+a[j]>m,i+

2021-04-05 18:07:03 85

原创 《算法笔记》学习笔记(10):二分

最经典的二分查找不再赘述#define _CRT_SECURE_NO_WARNINGS 1#include<cstdio>using namespace std;//二分查找int binarysearch(int A[], int left,int right, int x){ int mid; while (left <= right) { mid = (left + right) / 2; if (A[mid] == x)return mid; else

2021-04-04 11:38:17 84

原创 《算法笔记》学习笔记(9):贪心

贪心指的是考虑在当前状态下局部最优的策略,来使全局的结果达到最优。如果在想到某个似乎可行的策略,并且无法举出反例时,可以勇敢的实现它。1020 月饼 (25 分)月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只

2021-04-03 11:40:46 60

原创 《算法笔记》学习笔记(8):递归(recursion)

递归中有两个重要概念:1.递归边界2.递归式最简单的递归如阶乘,斐波那契数列全排列问题若把问题描述成“输出1-n这n个整数的全排列“,那么就可以将其分为若干个子问题:”输出以1开头的全排列””输出以2开头的全排列”……”输出以n开头的全排列”。不妨设一个数组P,用于存放当前的排列,在设一个散列数组hashTable,其中hashTable[x]当整数x已经在数组P中时为true。现在按顺序往P的第一位到第n位填入数字。不妨假设已经填好了P[1]-P[index-1],准备填入P[index].显

2021-04-01 18:51:28 85

原创 《算法笔记》学习笔记(7):散列

散列(hash)是常用算法之一。简单来说,散列就是将一个元素通过一个函数转换为整数,使得该整数可以尽量唯一的代表这个元素。将这个函数成为散列函数H,元素转换前为key,转换后为H(key)。key为整数时,常用的散列函数有直接定址法、平方取中法、除留余数法等。直接定址法有恒等变换H(key)=key和线性变换H(key)=a*key+b;平方取中法是指取key平方中间若干位作为hash值,很少使用。除留余数法是H(key)=key%mod,表长TSize必须不小于mod,而mod一般取素数,因此为了

2021-03-31 14:50:14 168 4

原创 《算法笔记》学习笔记(6):c++中的sort函数

sort()是一个排序函数,使用时需要引入algorithmvoid sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);表示对first到last范围的数据进行排序,comp不写则默认为升序https://pintia.cn/problem-sets/994805342720868352/problems/9948054743381278721025 PAT RankingProgramming

2021-03-27 17:00:18 133

原创 《算法笔记》学习笔记(5):进制转换

将一个p进制的数转换为q进制,需要两步:1.将p进制数x转换为十进制数y2.将十进制数y转换为Q进制数z对于第一步,有公式可以写出函数int convertToDecimal(int a, int p){ int ans = 0, product = 1; while (a) { ans = ans + (a % 10) * product; a = a / 10; product *= p; } return ans;}对于第二步,可以用短除法倒取余数求得int

2021-03-26 22:28:23 168

原创 《算法笔记》学习笔记(4):日期处理

题目描述有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。输入有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD输出每组数据输出一行,即日期差值样例输入2013010120130105样例输出5思路先检查输入的两个数据,不妨假设第一个小于第二个(不满足则交换)。创建一个存放非闰年和闰年每个月的天数的二维数组,用基础运算(/和%)求出输入的日期中的年、月、日。在计算时,现将天数+1,若其超出对应的月份的天数,则将天数置1,月份+1

2021-03-26 21:42:52 208

原创 《算法笔记》学习笔记(3):结构体的初始化

这部分的知识和java的类很相似构造函数是一种用来初始化结构体的函数,特点是不需要写返回类型,函数名与结构体名相同。定义一个结构体之后,系统会生成一个默认的构造函数(但不可见),我们也可以手动创建构造函数,对应不同的初始化方式示例程序#include<stdio.h>struct studentInfo{ int id; char gender; //默认构造函数 studentInfo(){} //只初始化gender studentInfo(char _gender)

2021-03-26 10:49:16 56

原创 《算法笔记》学习笔记(2):引用

引用是C++的知识,对引用变量的操作就是对原变量的操作,相当于起了个别名。引用只需在函数的参数类型后面或变量名前面加个&就可以了。示例程序#include<stdio.h>void swap(int&, int&);int main(){ int a = 10, b = 5; swap(a, b); printf("a=%d b=%d", a, b);}void swap(int& x, int& y){ int t = x; x

2021-03-25 22:39:28 57

原创 《算法笔记》学习笔记(1):sscanf和sprintf

最近开始学《算法笔记》这本书,如果遇到没学过的会记录sscanf的用法sscanf(str,"%d,&n);将字符串str中的内容以%d的格式写入n中示例程序#include <stdio.h>int main(){ int n; char str[100] = "123"; sscanf(str, "%d", &n); printf("%d\n", n); return 0;}输出为sprintf的用法sprintf(str,"%d",n)

2021-03-25 21:50:20 76

原创 opencv学习笔记(28):点多边形测试

概念介绍 - 点多边形测试测试一个点是否在给定的多边形内部,边缘或者外部pointPolygonTest(InputArray contour,// 输入的轮廓Point2f pt, // 测试点bool measureDist // 是否返回距离值,如果是false,1表示在内面,0表示在边界上,-1表示在外部,true返回实际距离)返回数据是double类型步骤构建一张400x400大小的图片, Mat::Zero(400, 400, CV_8UC1)画上一个六边形的闭合区域

2021-03-08 16:07:07 204

原创 opencv学习笔记(27):图像矩(Image Moments)

图像矩的概念和实际意义可参考https://blog.csdn.net/qq_37207090/article/details/83986950//计算矩moments(InputArray array,//输入数据bool binaryImage=false // 是否为二值图像)//计算面积contourArea(InputArray contour,//输入轮廓数据bool oriented// 默认false、返回绝对值)//计算长度arcLength(Input

2021-03-08 15:23:59 196

原创 opencv学习笔记(26):轮廓周围绘制矩形框和圆形框

void cv::approxPolyDP ( InputArray curve,OutputArray approxCurve,double epsilon,bool closed ) 基于RDP算法实现,目的是减少多边形轮廓点数参数curve Input vector of a 2D point stored in std::vector or MatapproxCurve Result of the approximation. The type should match

2021-03-08 14:51:28 166

原创 opencv学习笔记(24):轮廓发现

cv::findContours(InputOutputArray binImg, // 输入图像,非0的像素被看成1,0的像素值保持不变,8-bit OutputArrayOfArrays contours,// 全部发现的轮廓对象OutputArray, hierarchy// 图该的拓扑结构,可选,该轮廓发现算法正是基于图像拓扑结构实现。int mode, // 轮廓返回的模式int method,// 发现方法Point offset=Point()// 轮廓像素的位移,默认

2021-03-07 21:50:01 44

原创 opencv学习笔记(23):模板匹配(Template Match)

模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。所以模板匹配首先需要一个模板图像T(给定的子图像)另外需要一个待检测的图像-源图像S工作方法,在带检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。matchTemplate(InputArray image,// 源图像,必须是8-bit或者32-bit浮点数图像InputArray templ,// 模板图像,类型与输入图像一致OutputArray result,// 输出结果,必

2021-03-07 19:11:36 277

原创 opencv学习笔记(20):直方图计算

直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的。直方图最常见的几个属性:dims 表示维度,对灰度图像来说只有一个通道值dims=1bins 表示在维度中子区域大小划分,bins=256,划分为256个级别range 表示值得范围,灰度值范围为[0~255]之间相关APIsplit(// 把多通道图像分为多个单通道图像const Mat &src, //输入图

2021-03-06 21:59:33 70

原创 opencv学习笔记(18):霍夫检测(直线、圆)

霍夫直线检测Hough Line Transform用来做直线检测前提条件 – 边缘检测已经完成平面空间到极坐标空间转换对于任意一条直线上的所有点来说变换到极坐标中,从[0~360]空间,可以得到r的大小属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线霍夫检测的具体原理https://blog.csdn.net/weixin_40196271/article/details/83346442相

2021-03-06 16:16:38 125

原创 opencv学习笔记(17):Canny边缘检测

Canny算法介绍Canny是边缘检测算法,在1986年提出的。是一个很好的边缘检测器很常用也很实用的图像处理方法Canny算法介绍 – 五步 in cv::Canny高斯模糊 - GaussianBlur灰度转换 - cvtColor计算梯度 – Sobel/Scharr非最大信号抑制高低阈值输出二值图像Canny算法介绍 - 非最大信号抑制Canny算法介绍-高低阈值输出二值图像T1, T2为阈值,凡是高于T2的都保留,凡是小于T1都丢弃,从高于T2的像素出发,凡是大于T1而

2021-03-06 10:41:06 89

原创 opencv学习笔记(16):拉普拉斯算子

理论解释:在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。处理流程高斯模糊 – 去噪声GaussianBlur()转换为灰度图像cvtColor()拉普拉斯 – 二阶导数计算Laplacian()取绝对值convertScaleAbs()显示结果Laplacian(InputArray src,OutputArray dst,int depth, //深度CV_16Sint kisze, // 3double s

2021-03-06 09:17:46 199

原创 opencv学习笔记(15):Sobel算子

卷积应用-图像边缘提取边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。如何捕捉/提取边缘 – 对图像求它的一阶导数delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强Sobel算子是离散微分算子(discrete differentiation operator),用来计算图像灰度的近似梯度Soble算子功能集合高斯平滑和微分求导又被称为一阶微分算子,求导算子,在水平和垂直两个

2021-03-05 23:03:06 338

原创 opencv学习笔记(14):处理边缘

卷积边界问题图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。处理边缘在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是: BORDER_DEFAULT,此外常用的还有如下几种:BORDER_CONSTANT – 填充边缘用指定像素值

2021-03-05 19:55:29 157

原创 opencv学习笔记(13):自定义线性滤波

卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)卷积如何工作把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。数学表达如下:常见算子robert算子sobel算子拉普拉斯算子定义算子的方式Mat robertkernelx = (Mat_<int>(2, 2) << 1, 0, 0, -1);

2021-03-05 18:42:01 53

原创 opencv学习笔记(12):基本阈值操作

阈值是什么?简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation)double cv::threshold ( InputArray src,OutputArray dst,double thresh,double maxval,int type)type:src是灰度图实例代码#include<opencv2/opencv.hpp>#include<iostream>using

2021-03-05 12:53:43 66

空空如也

空空如也

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

TA关注的人

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