自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 读取csv文件(复制即可用)

C++读取csv文件

2022-07-22 14:28:22 6442 6

原创 PyTorch中激活函数GELU、Swish、Mish函数的实现

GELU的中文名为高斯误差线性单元,它在自然语言处理领域被广泛应用。GELU激活函数结合了激活参数1或0的取值概率和神经网络的激活值,使得神经网络的激活值越小,其所乘的激活概率为1的概率越小,以此保留概率性和对输入的依赖性。具体实现如下:def gelu(x): return 0.5*x*(1+tanh(np.sqrt(2/np.pi)*(x+0.044715*pow(x,3))))Swish和Mish函数可以看作是GELU的一个特例,可以替换模型中现有的激活函数,使模型精度有所提高。实现

2022-05-26 21:54:46 5049

原创 PyTorch中Module类的使用方法,模型中参数的添加与获取以及保存与载入模型

1 Module类的使用方法1.1 add_module()方法可以使用该方法向模型中添加层,示例如下:self.Linear1 = nn.Linear(inputdim,hiddendim)self.add_module("Linear1", nn.Linear(inputdim,hiddendim))这两行代码是等价的,都可以向模型里添加两个全连接层。1.2 获取模型中各层的信息1.2.1 children()方法和named_children()方法for modu

2022-05-24 22:52:57 1532

原创 深度学习中常用优化器(SGD, Momentum, Nesterov Momentum, AdaGrad, RMS Prop, Adam)的伪代码和对比

在深度学习中,优化器是其重要组成部分,本文来介绍一下常用优化器(SGD, Momentum, Nesterov Momentum, AdaGrad, RMS Prop, Adam)的伪代码并对他们进行对比。1. SGDSGD的伪代码如下:SGD的梯度更新公式简单,采样用的是小样本,训练速度快,但由于是成之字形下降,在一些情况下效率很低。2. (SGD with) Momentum伪代码如下:和SGD相比,带动量的SGD主要是借助物理学中动量的概念,在下降时保留一部分之前的

2022-03-12 14:49:56 4600

原创 任意角度旋转图片(python)

处理图片数据的时候遇到要旋转图片的需求,记录一下解决方案。利用PIL和torchvision.transforms.functional这是一个常用的图像处理的方法,可以对图像进行裁剪旋转等等操作,对于大图片来说,得到的效果很好,具体的实现代码为:from PIL import Imageimport torchvision.transforms.functional as TFimage = Image.fromarray(np.uint8(point_set))image = TF.r

2021-07-30 17:22:54 3283

原创 已知点坐标,求夹角大小(0-360度)(python)

在python中,math.asin求出的夹角范围为(-90,90),math.acos求出的夹角范围为(0,180),有时候需要求(0,360)范围内的角,写了一个函数供以后使用。def arcsin_and_arccos(pt1, pt2): delta_x = pt2[0] - pt1[0] delta_y = pt2[1] - pt1[1] sin = delta_y/math.sqrt(delta_x**2 + delta_y**2) cos = delta_x/

2021-07-27 15:52:47 3468

原创 关于sort函数中的cmp参数的笔记(C++)

C++中sort函数是经常会用到的一个函数,主要的功能是排序,可以给数组,或者链表list、向量排序。sort(first_pointer,first_pointer+n,cmp)在三个参数中,前两个参数很好理解(第二个参数记住要是尾地址的下一个地址),第三个参数一直会忘记他的用法,因此今天写一篇做一个笔记。第三个参数默认可以不填,如果不填sort会默认按数组升序排序。当需要以一些特殊的方式,或者对集合中每个元素中的某个子元素进行排序时,需要自定义cmp,自定义的方式有两种:(1)另定义一

2021-07-10 18:49:41 923

原创 超简洁版 查找列表中的重复元素并统计重复数量(python)

之前在碰到要寻找列表中的重复元素的问题时,总是用for循环来解决,但是总是觉得有点繁琐,感觉这么频繁使用的需求应该有什么简洁的方法,搜索了一番,还真有,以下做一个总结。这个方法主要是用到collections.Counter函数,导入方法为from collections import Counter。collections在python官方文档中的解释是High-performance container datatypes,具体到Counter我认为可以理解为一个计数器,统计列表中的各个元素的个数。

2021-06-25 10:04:27 4212

原创 简易黑白图像放大方法(Python)

在复现一篇论文的时候,碰到需要将原图片放大一倍的需求,由于精度要求不高,网上给出的方法太过繁琐,就自己写一个简易的算法来实现。输入的是一个黑白图片矩阵。主要的思路是在两个像素点之间进行插值,如果两个像素点都是0,插值0,有一个为1,插值1,这么做会稍微扩大1的范围,但基本还是保持了原来的形状,代码如下:def augment_pic(pic):#pic:2d array aug_pic_line = [] aug_pic = [] for i in range(len(pic)

2021-06-21 11:00:01 634

原创 “FindPython3.cmake“找不到的解决方案

在cmake中常见以下错误: By not providing "FindPython3.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Python3", but CMake did not find one. Could not find a package configuration file provided by "

2021-06-15 10:47:51 4139 3

原创 pandas输出csv不带自动添加的行和列的序号

在用pandas输出csv时,如果不对第一行和第一列进行定义,pandas会自动用数字序号补齐,但有时候我们只想单纯输出数据,不想要表头或者序号,那么就需要以下的操作:output = pd.DataFrame(data=list1)output.to_csv('save_path', header=None, index=None)将header和index赋值成None即可。...

2021-06-07 15:52:40 12569 1

原创 万能通用版 csv文件导入,多种形式的数字字符串转float(C++)

本文主要实现的是输入文件地址,以字符串的形式读取csv文件中的数据(正数、负数、科学计数法数据混合),在将这多种形式的数据转化成float。vector<vector<vector<float>>> c;vector<vector<float> >a; vector<float>b; inline void file_to_string(vector<string> &record, const stri

2021-06-07 15:31:57 686

原创 将PyTorch模型部署到C++上(Ubuntu)

为什么要这么做?PyTorch作为一个开源的Python机器学习库正受到越来越广泛的关注和应用。然而,作为一门语言,Python并不是在任何场景下都适用的。在生产以及部署到自动驾驶车辆上等场景中,C++常常是更好的选择。因此需要将PyTorch模型部署到C++上。以下是实现的步骤。将PyTorch模型转化成Torch ScriptTorch Script的作用是用TorchScript编写的任何代码都可以从Python进程中保存并加载到没有Python依赖关系的进程中。有两种方法可以实现这一步.

2021-06-01 15:42:39 1625

原创 【数据分析】单个csv文件导入与输出,多个csv文件按顺序批量导入和输出(Python)

csv文件是常见的数据存储格式,经常用它来保存大量的实验数据。为了便于分析,需要将其导入Python中进行进一步的处理,并在处理之后重新输出为csv文件。下面就来介绍利用Python对单个csv文件进行导入与输出操作,以及对多个csv文件按顺序进行批量的导入和输出操作。单个csv文件的导入import pandas as pddata = pd.read_csv(data_path)data_lists = data.values.tolist()这样就可以将csv导入并转化为list的形

2021-05-28 10:38:47 1901

原创 【神经网络】权值初始化以及常见的激活函数对应的初始化方法(Pytorch)

权值初始化是搭建神经网络之后的重要步骤。适当的初始化可以加速模型的收敛,而不适当的初始化则会使梯度消失或爆炸,下面主要针对常见的激活函数简要介绍两种权值初始化方法。Xavier 方法该方法主要针对饱和激活函数如 sigmoid 和 tanh 等。pytorch中的调用语句为:tanh_gain = nn.init.calculate_gain('tanh')nn.init.xavier_uniform_(m.weight.data, gain=tanh_gain)Kaiming 方法该

2021-05-24 14:14:11 633

原创 【数据分类】利用随机森林的方法进行数据分类

关于随机森林的原理,可以参考这篇博文:随机森林算法及其实现(Random Forest)关于sklearn中随机森林分类器参数和属性和含义(中文版),可以参考这篇博文:sklearn随机森林分类类RandomForestClassifier下面用一个类来实现随机森林:from sklearn.ensemble import RandomForestClassifierclass CipvRandomForest(): def __init__(self): self.c

2021-05-21 15:41:28 2113

原创 【神经网络-数据分类】利用深度学习神经网络(DNN)来对数据进行分类

对于数据量大,适合以一维数据作为输入且难以探索数据内部规律的数据集,可以尝试利用深度学习神经网络(DNN)来对数据进行分类。由于是分类问题,使用Adam作为优化器,交叉熵作为损失函数,大概的网络结构代码如下:import torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch.utils.data.dataset import Datasetfrom torch.utils.data import DataLoade

2021-05-21 11:30:21 4090 1

原创 【神经网络-数据分类】利用卷积神经网络(CNN)对数据进行分类

对于数据量大,维度高,且难以找到数据之间内在关系的数据集,可以尝试用卷积神经网络对数据进行分类。 以下为卷积神经网络数据分类的大致结构,采用Adam作为优化器,交叉熵作为损失函数。import torchimport torch.nn as nnfrom torch.utils.data.dataset import Datasetfrom torch.utils.data import DataLoaderclass CipvCNN(nn.Module): def __ini.

2021-05-21 10:25:56 6447 11

原创 【排序算法】两种插入排序的思路与C++实现

插入排序是一种常见的排序方式,其原理是,从前往后按顺序选取一个元素,将其与之前的元素进行比较,插入到合适的位置,以此类推直到取完所有元素。具体来说,插入排序有两种实现方式:交换法插入排序:交换法插入排序的主要思路是先插入所选取元素,再和前面的元素比大小,通过不断交换的方式完成排序。vector<int> insertsort1(vector<int>& nums) { for (auto i = 1; i != nums.size(); i++) { int

2021-04-17 17:51:28 114

原创 【排序算法】二元选择排序(C++实现)

选择排序是一种常见的排序方法。它的主要思路是:遍历数组,每一次找出所遍历数组中的最小值或最大值,放在数组开头或者末尾,然后再遍历剩下的数组并找到最小值/最大值,直到遍历完为止。所谓二元选择排序,就是在遍历数组的过程中,同时寻找最小值和最大值,放在数组的开头和末尾,这样可以减少遍历次数,提高效率。具体代码实现如下:void select_sort(vector<int>& numset) { for (auto i = 0; i != numset.size() / 2; i++)

2021-04-17 12:03:24 378

原创 【排序算法】冒泡排序进阶版(C++)

冒泡排序是一种基础且常见的排序方法。其主要思路为从前到后遍历数组,一边比较一边向后两两交换,将最值冒泡到最后一位。然而,在遍历过程中,存在还没有遍历完整个数组就已经排序完成的情况。举个例子,如果需要排序的数组是[1,2,6,3],我们希望将其从小到大排序,在第一轮排序完成之后,数组改变为[1,2,3,6],此时已排序完成,应当及时停止,不再进行之后的排序。针对这种情况,可以使用一个变量记录当前轮次的比较是否有交换发生,若没有,则代表数组已经有序,则停止排序。具体实现代码如下:void bubble_so

2021-04-17 10:11:35 319

原创 关于排序中数组元素前后交换的小技巧

我们知道,交换数组中的元素在很多情况下都会用到,一般的方式如下:int temp = a;a = b;b = temp;然而,如果要在不引入第三个中间变量的情况下实现交换,要怎么做呢?可以用先加后减或者位运算的方式完成数字的交换。先加后减:b = b + a;a = b - a;b = b - a;位运算:a = a ^ b;b = b ^ a;a = a ^ b;...

2021-04-17 00:40:53 608

原创 【数据库】三分钟快速创建一个简单的数据库(Postgresql)

三分钟快速创建一个简单的数据库(Postgresql)本文主要介绍建立一个简单数据库的基本步骤(创建数据库、创建数据表、导入数据)以及一些注意事项。创建数据库创建一个新的数据库:CREATE DATABASE 数据库名;如果需要对数据库改名字:UPDATE pg_database SET datname = '要改的名字' WHERE datname = '原来名字';删除数据库:DROP DATABASE 数据库名;创建数据表创建数据表的基本格式为:CREA

2020-11-21 00:35:27 3970

空空如也

空空如也

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

TA关注的人

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