- 博客(64)
- 收藏
- 关注
原创 C++入门(四):完美转发
函数模板可以将自己的参数“完美”地转发给内部调用的其它函数。所谓完美,即不仅能准确地转发参数的值,还能保证被转发参数的左、右值属性不变。注:在 C++ 中,一个表达式不是左值就是右值。
2022-09-27 19:34:20 1152 1
原创 C++入门(三):移动语义
拷贝构造函数: C++ 98/03 标准定义,作用是用其它对象初始化一个同类的新对象。需要注意:1.实现原理:为新对象复制一份和其它对象一模一样的数据。2.当类中拥有指针类型的成员变量时,拷贝构造函数中需要以深拷贝的方式复制该指针成员(否则一旦多个对象中的指针成员指向同一块堆空间,这些对象析构时就会对该空间释放多次,这是不允许的)
2022-09-27 19:24:13 2082 1
原创 C++入门(一): 引用(左值引用)
当引用的类型和数据的类型不一致时,如果它们的类型是相近的,并且遵守「数据类型的自动转换」规则,那么编译器就会创建一个临时变量,并将数据赋值给这个临时变量(这时候会发生自动类型转换),然后再将引用绑定到这个临时的变量。引用和指针在本质上是一样的,不能绑定到无法寻址的临时数据,并且C++对引用更加严格,在某些编译器下甚至连放在内存中的临时数据都不能绑定。常引用: 无特殊说明的情况下,常引用指的是常左值引用;type 是被引用的数据的类型,name 是引用的名称,data 是被引用的数据。
2022-09-27 19:18:34 974
原创 入门设计原则C++实现二:开闭原则
软件实体应当含义:对于扩展是开放的(Open for extension)。也就是模块的行为是可以扩展的,当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。当项目需求变动时,在不修改源代码前提下,通过增加等方式满足新的需求,而不是修改。...
2022-08-03 09:34:22 259
原创 入门设计原则C++实现一:单一职责原则
上面代码Animal类中的behavior方法做了所有操作,不管传入的参数是何值,执行的操作是固定的。但实际并不是我们想要的,比如当传入是燕子/鱼的时候,就会出现违背常理结果。究其原因就是animal类扮演的角色过多,处理出现异常了,这种就是违背的单一职责原则较为典型的例子。此时需要考虑将类拆分类1,类2, 类1负责功能A,类2负责功能B。变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。...
2022-08-03 09:30:50 446 1
原创 入门设计原则C++实现五:依赖倒置原则
为了更好理解该原则,首先明确以下概念高层次模块也叫上层代码,一般可以认为是调用方(客户端)。以系统三层结构(表示层,业务逻辑层,数据访问层)为例子,表示层相对于业务逻辑层来说,就是高层;业务逻辑层相对于数据访问层来说就是低层;底层次模块也叫作下层代码,一般可以认为是被调用方(提供服务的一方)。如上例子,业务逻辑层相对于表示层来说,就是底层;数据访问层相对于业务逻辑层来说,就是底层。抽象设计原则/模式中的抽象可以理解为约束/规范,代码中表现为接口/抽象类具体考虑以下案例。.........
2022-07-29 09:30:02 276
原创 入门设计原则C++实现四:里氏替换原则
里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。里氏替换原是继承复用的基础,它反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范举个例子,比如有一个基类Animal和一个派生类Cat,程序中任何使用Animal对象的地方,我们都可以放Cat对象上去(派生类的对象能够替换子类的对象),而完全不扰乱程序的逻辑(程序里关于Animal的假设,Cat都不能打破)。......
2022-07-29 09:27:41 922 1
原创 入门设计原则C++实现三:接口隔离原则
在下面例子中,IBehavior类是接口类,fish和bird类继承自该类并使用该类提供的接口(客户端依赖接口),但是在第一份代码中,客户端如鱼类依赖了它不需要的接口(fly方法),因此违背接口隔离原则中的“客户端不应该依赖它不需要的接口”。臃肿(多余方法)接口设计,称之为胖接口,一点接口方法变动,会影响所有实现该接口的客户端类程序,比如当在行为类中增加新的动作接口时,如“爬行”,需要在所有派生动物类中重写爬行方法,耦合度过高。接口一种约束形式,为不相关的类提供约定好的处理方法;.........
2022-07-29 09:25:04 754
原创 VScode+远程服务器docker+C/C++ 代码挑战配置
背景终端机:Win 10 ,安装VSCode服务器:Ubuntu18.04环境管理 Docker开发语言 CDokcer目录挂在至Ubuntu18.04,同享代码文件系统。VSCode 通过ssh方式连接至 服务器,选择共享代码文件系统作为工作空间,如mount目录安装插件。注意,安装在服务器中而不是本地至此可实现代码跳转...
2021-12-16 16:41:32 1988
原创 jupyter notebook + 服务器中docker 使用配置
背景:设备1: 服务器Ubuntu16.04 无图形界面,docker 环境设备2:笔记本期望在笔记本访问 服务器docker中的环境(pytorch等)step 1: 确保笔记本能访问到服务器ssh -p 11122 user_name@ssh-proxy.xxx.com其中user_name@ssh-proxy.xxx.com 为服务器用户名和地址11122 为docker 映射端口step2: 服务器docker 安装jupyterpip install jupyter notebo
2021-10-22 13:25:24 606
原创 C/C++基础一:stack& heap
stackstack 由操作系统分配释放,用于存放函数值、局部变量等。操作方式类似于数据结构中的 stack(先入后出)heap堆,由程序员释放。若程序员不释放,则程序结束时由OS回收(内部机制用到链表数据结构)malloc、free是C中的函数。需要引用#include<stdlib.h>, 只负责分配和释放内存。new、delete是C++中的操作符,不需要引入头文件。new:首先分配内存;再调用类的构造函数;...
2021-10-10 22:36:00 214
原创 PyTorch 入坑十一: 损失函数、正则化----深刻剖析softmax+CrossEntropyLoss
这里写目录标题概念Loss FunctionCost FunctionObjective Function常用的损失函数交叉熵损失函数nn.CrossEntropyLoss()自信息熵(信息熵)相对熵(KL散度)softmax loss其他概念Loss Function计算一个样本的损失:Cost Function整个训练集(或者batch)的损失平均值Objective Function目标函数是一个更广泛的概念,在机器学习中,目标函数包含Cost和Regularization(正则项)
2021-09-25 21:42:19 3194
原创 PyTorch 入坑十:模型泛化误差与偏差(Bias)、方差(Variance)
问题阅读正文之前尝试回答以下问题,如果能准确回答,这篇文章不适合你;如果不是,可参考下文。为什么会有偏差和方差?偏差、方差、噪声是什么?泛化误差、偏差和方差的关系?用图形解释偏差和方差。偏差、方差窘境。偏差、方差与过拟合、欠拟合的关系?偏差、方差与模型复杂度的关系?偏差、方差与bagging、boosting的关系?偏差、方差和K折交叉验证的关系?如何解决偏差、方差问题?本文主要参考知乎文章,如有侵权,请联系作者删除。偏差、方差和噪声原文请参考链接,主要结论总结如下:为什么
2021-09-25 15:33:04 1461 1
原创 PyTorch 入坑九:权重初始化
梯度消失与爆炸参考x。可以得出结论: 要避免梯度消失或者梯度爆炸,就要严格控制网络输出层的输出值的范围,也就是每一层网络的输出值不能太大也不能太小。那么,参数如果使用均匀分布进行初始化,网络每一层的输出结果如何呢,下面通过代码验证BP网络的输出,代码中使用输出Tensor的标准差来衡量数据的尺度范围:import osimport torchimport randomimport numpy as npimport torch.nn as nnclass MLP(nn.Module):
2021-09-25 00:23:54 9768 2
原创 PyTorch 入坑八:卷积与转置卷积
卷积操作略输入输出尺寸变化略PyTorch实现nn.Conv2d(in_channels, out_channels, kernel_size, stride=1. padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')in_channels:输入通道数ou
2021-09-21 23:30:21 1869 2
原创 PyTorch 入坑七:模块与nn.Module学习
模型创建概述本章开始正式整理深度学习网络相关基础知识。模型创建分为两个部分:模型结构创建和权值初始化。模型结构创建从粒度上讲:有层layer和网络Net 两个粒度。前者是指构成CNN的基础结构,如卷积层、池化层、BN层、激活函数层、损失函数层等;后者是指实现某一功能的网络结构如LeNet,AlexNet和ResNet等。创建好模型后,需要对模型进行权值初始化,pytorch提供了丰富的初始化方法,Xavier,Kaiming,均匀分布,正态分布等。好的权重初始化有以下几点优点:加速网络收敛解更
2021-09-21 15:45:59 1609 1
原创 PyTorch 入坑六 数据处理模块Dataloader、Dataset、Transforms
深度学习中的数据处理概述深度学习三要素:数据、算力和算法在工程实践中,数据的重要性越来越引起人们的关注。在数据科学界流传着一种说法,“数据决定了模型的上限,算法决定了模型的下限”,因此在这个“说法”中,明确的表明了,只有好的数据才能够有好的模型,数据才是决定了模型的关键因素。数据很重要简单来说,就是找到好的数据,拿给模型“吃”。但是怎么找到“好”的数据,什么样才算是“好”的数据,给模型吃了后模型性能有没有变化等等问题是一个非常庞大的课题,本文并不深入探讨,首先从特征工程的角度抛出一张图,另外总结一
2021-09-20 19:07:16 1130 1
原创 PyTorch 入坑五 autograd与逻辑回归
torch.autograd 深度学习模型的训练就是不断更新权值,权值的更新需要求解梯度,梯度在模型训练中是至关重要的。 然而求解梯度十分繁琐,pytorch提供自动求导系统。我们不需要手动计算梯度,只需要搭建好前向传播的计算图,然后根据pytorch中的autograd方法就可以得到所有张量的梯度。torch.autograd.backward功能:自动求取计算图所有节点变量的梯度tensor:
2021-09-20 01:07:10 277
原创 PyTorch入坑(一)~(三): Tensor的概念,基本操作和线性回归
Documentation: https://mmsegmentation.readthedocs.io/English | 简体中文IntroductionMMSegmentation is an open source semantic segmentation toolbox based on PyTorch.It is a part of the OpenMMLab project.The master branch works with PyTorch 1.3+.[外链图片转存失败,源
2021-09-16 20:35:28 375
原创 从普通相机模型到鱼眼畸变模型--标定与去畸变
使用markdown写博客的优缺点方便些注释标题 List item d d d adwq eList itemd awqdad add addad a#include <stdio.h>int main() {printf()}|星期一 |2 |3|| 3| 4|4|
2021-09-14 20:19:47 3815 3
原创 top 并grep 特定信息打印至txt
工程中我们经常会查看程序的占用情况,并统计相关数据,以下命令可实现打印top输出的cpu 内存占用率至txttop -n 10 -d 1 -b |grep -E “chrome” |tr -s " "| cut -f 9,10|cut -f 10 -d ’ '> test.txt其中-n 10 -d 1 分别为监控次数和时间间隔, chrome为所要监控的应用,cut -f 10 -d ’ ’ 为一行中提取 cpu占用率数字。...
2021-04-02 19:43:14 3244 1
原创 PCL Lesson6:Eigen基础
#include "stdio.h"#include <iostream>#include <Eigen/Core>#include <Eigen/LU> //LU分解求逆int main(int argc,char*argv[]){ Eigen::Matrix3d R = Eigen::Matrix3d::Random(); ...
2019-01-07 12:23:19 270
原创 PCL Lesson5: 直通滤波+空间平面拟合+提供原始点云数据集PCD文件
书接上文。本节做下面一个工作:通过直通滤波过滤一小片平面区域的点云(标定版),通过最小二乘法拟合,并把参数化的平面绘制在原图中。待修正:拟合平面时离散点的处理。和拟合效果的判别效果:原始点云的文件这这里:(16线激光雷达,3.2w左右个点)https://pan.baidu.com/s/1k6JOqbMgIFBJVz54bt3Ekg#include <stdio.h>#...
2018-12-03 20:55:51 779
原创 PCL Lesson 4:直通滤波+多视图可视化
输入原始激光点云,经过直通滤波,在一个窗口中同时显示两个点云输入:pcdData//lader3.PCD 文件输出:可视化#include <stdio.h>#include<boost/thread.hpp>#include<boost/timer.hpp> #include <pcl/visualization/cloud_viewe...
2018-12-03 19:31:32 601
原创 PCD Lesson3:PCD文件的读取
PCD文件的读取#include <stdio.h>#include<boost/thread.hpp>#include<boost/timer.hpp> #include <pcl/visualization/cloud_viewer.h>#include <pcl/io/io.h>#include <pcl/io...
2018-12-01 19:58:47 444
原创 PCD Lesson2:PCD文件的write
随机生成PCL点云,写入到PCD文件中并保存#include <stdio.h>#include <string>#include <vector>#include <fstream>#include <iostream>#include<boost/thread.hpp>#include<boost/t...
2018-12-01 19:48:22 373
原创 PCL Lesson1 :PCL库PCLVisualizer的简单使用
PCL库PCLVisualizer的简单使用。包括实例化对象,填充点云,静态显示和动态显示#include <stdio.h>#include <string>#include <vector>#include <fstream>#include <iostream>#include<boost/thread.hpp...
2018-12-01 19:33:26 1688
原创 自动驾驶领域常用的数据集(检测,分割,定位)
原文链接:https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA==&mid=2649030409&idx=1&sn=2202eba9d4f38acacc46da72f1e6eb86&chksm=87134174b064c8627d904ca31cbb723a614d4223ef67c7642fbde5e6cfb57eee23...
2018-11-26 21:31:22 14666 2
转载 /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9: undefined reference toTIFFIsTiled@LIBTIFF_4.0'
今天编译caffe ,本来编译过无数次caffe了,基本坑都能解决的。但这次惹恼我了。一直搞不定。错误信息是这样的:/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.8: undefined reference to TIFFIsTiled@LIBTIFF_4.0' /usr/lib/x86_64-linux-gnu/libopencv_hi...
2018-11-21 21:12:31 2428
原创 google protobuf的简介、安装和使用
简介: http://blog.csdn.net/hailong0715/article/details/52016682安装和使用: http://blog.csdn.net/hailong0715/article/details/52057873
2018-01-31 19:28:48 291
转载 ubuntux学习日记
ubuntu 14.04 下利用apt-get方式安装opencv 原创 2016年10月06日 22:17:31 标签:
2018-01-30 11:29:41 332
转载 Ubuntu学习日记--Lesson10:gcc、make、makefile、cmake、cmakelists区别
1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大4.所以出现了make工具
2018-01-29 22:13:20 283
转载 Ubuntu学习日记--Lesson9:显卡工作状态查看命令
在使用GPU做计算,比如跑 Deep Learning代码的时候,我们可能希望能够实时检测显存的使用情况,但是Linux一般不会自带监视现存的工具。Nvidia自带了一个 nvidia-smi的命令行工具,会显示显存使用情况,但我们总不能每 10s 中就输入一次这个命令。 这时候就需要用到 watch命令了。watch 命令简介watch是做什么的?看一下系统怎么说$ whatis w
2018-01-21 22:01:36 2756
原创 Ubuntu学习日记--Lesson8:make 2>&1 | tee log.txt命令解析 (错误输出,重定向,管道符)
make 2>&1 | tee a.log1. make是什么? make是linux下一个非常强大的命令,简单点就是你要编译你的源代码就得靠他了。2. 2>&1是什么意思? 0 stdin,1 stdout,2 stderr 2>&1应该分成两个部分来看,一个是2>以及另一个是&1, 其中2>就是将标准出错重定向到某个特定的地方;&1是指无论标准输出
2018-01-16 22:09:43 909
原创 caffe学习日记--lesson8:站在巨人的肩膀上, denny的学习专栏——徐其华——caffe
caffe的入门使用教程 和caffe python接口,思路清晰、完整,入门值得一看 http://www.cnblogs.com/denny402/category/759199.html
2018-01-16 11:15:34 582
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人