- 博客(201)
- 资源 (29)
- 收藏
- 关注
原创 指令与条件码
一.ALU:算数逻辑单元ALU从寄存器中读取数据后,执行相应的运算,在返回目的寄存器rdx中.简单示例如下图当然ALU除了执行算术和逻辑运算指令以外,还会根据运算结果去设置条件码寄存器.二.条件码寄存器:长度为单个比特位CF检测溢出,ZF检测零也就是说a+b结果为1, ZF为0,其他类似相应c代码与汇编例子:三.嵌套数组:地址计算:xd起始地址,L表示数据类型T的大小,对于int就是...
2022-05-22 16:46:10 2688 1
原创 程序的机器级表示
一.生成汇编:1)对于c gcc -S mstore.c2)对于cpp:g++ -Smstore.cpppushq: 将寄存器rbx的值压入程序栈进行保存movq:寄存器rbx的值与rdx的值一致,都是dest指针所指向的内存地址popq:在函数返回前,恢复rbx的内容ret:函数返回intel64位处理器包含16个通用目的的寄存器,这些寄存器用来存放整数数据和指针.如图下调用者保存寄存器和被调用者保存寄存器,例如函数A调用函数B,B中rbx寄存器被修改...
2022-05-15 16:28:28 488
转载 MSE与FC作用
一.MSE作用在做super resolution的时候,如果用MSE,做出来的图片会非常的模糊,就是因为MSE是基于高斯分布假设,最后的结果会尽可能地靠近高斯分布最高的地方,使得结果不会太sharp。二.FC作用转载:为什么回归问题用MSE?全连接层的作用是什么?...
2022-04-12 15:32:12 308
原创 CSAPP--浮点数
一.定点表示小数缺点:表示不了很大的数二.IEEE关于浮点数表示法float32:符号位1位,阶码字段:8位,小数点为23位float32:符号位1位,阶码字段:11位,小数点为52位三.浮点数的数值类型1.规格化值2.非规格值3.特殊值而阶码的值决定其属于那一类当阶码的二进制不为0和255时,表示规格化值;当阶码的二进制全为0时,表示非规格化值;当阶码的二进制全为1时,表示特殊化值,其包含两类一类是无穷大或无穷小,一类不是一个数(..
2022-03-20 11:52:34 481
原创 CSAPP--整数的运算
一.无符号数加法运算二.有符号数加法运算三.无符号数乘法截断w位也就是对2\w取模参考:【合集】CSAPP-深入理解计算机系统_哔哩哔哩_bilibili
2022-03-13 23:01:11 410
原创 CSAPP--整数的表示
非负数编码:负数编码(采用补码即原码取反+1):故对于四位补码,最大值为7,最小值为-8所以各类型负数/非负数范围:不同字节无符号最大值不同字节有符号最大值不同字节有符号最小值例子:这是因为虽然位模式不变,但是解释位的方式改变了。...
2022-03-06 11:29:26 199
原创 CSAPP--信息的表示与处理
虚拟地址空间:大多数 Intel 兼容机采用小端模式,IBM 和 Sun 公司的机器大多数机器采用大端法。对于很多新的处理器,支持双端法,可以配置成大端或者小端运行。例如基于 ARM架构的处理器,支持双端法,但是 Android 系统和 iOS 系统却只能运行在小端模式.下面是代码测试,获取16进制表示:#include <stdio.h>#把指针看成指向一个字节的序列,而不是对象的原始数据类型typedef unsigned char * byte_p..
2022-02-20 16:02:15 316
原创 CSAPP-计算机漫游
一.编译系统的工作流程:test.cpp#include <iostream>using namespace std;int main(){//hahhacout<<"hello world"<<endl;return 0;}直接生成可执行程序testg++ -o test test.cpp深入解析生成可执行程序test的过程1.g++ -E test.cpp > test.i这一步生成test.i进行预处理,.
2021-12-11 21:24:18 616
原创 leetcode双指针(python与c++)
1.字符串的排列思路:双指针+滑动窗口python:class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: dict_={} for i in s1: dict_[i] = dict_.get(i,0)+1 # # print('==dict_:',dict_) left,right =0,0 le
2021-11-27 20:59:14 312
原创 形象理解矩阵操作
线性变换可看着是对空间的挤压伸展。也就是看成把向量中的值对矩阵列向量加权 ,在对向量求和矩阵左乘就是对行向量操作,矩阵右乘就是对列向量操作. 可以将其中一个矩阵看成是多个列向量,在拆开对剩下矩阵执行1操作绕y轴旋转后的旋转向量 即由 变为4.行列式如何量化变换对空间的挤压,拉伸?如下,线性变换面积增加6倍。 a表示对x轴拉伸,b表示对y拉伸 如下,线性变换面积不变。 线性变换改变面积的比例就被称为行列式行列式为0,说明平面被拉伸到线甚至点。行列式为负表示空间被翻转,但是绝对值仍然表示面积
2021-11-22 18:57:53 1367
原创 leetcode BFS(python+c++)
1.最小基因变化思路:bfs搜索python:class Solution: def minMutation(self, start: str, end: str, bank: List[str]) -> int: library = ['A','C', 'G','T'] queue = [start] num = 0 vis = set() while queue: s.
2021-11-18 23:49:17 1020
原创 操作系统--内核级线程实现
五段论 `:进入内核靠的是中断,fork是创建系统进程调用,进程由资源+执行序列组成,而创建执行序列其实就是创建线程.TSS:任务结构段 参考:操作系统_哈尔滨工业大学_中国大学MOOC(慕课)哈工大操作系统实验(二)系统调用...
2021-11-14 18:29:30 211
原创 操作系统--用户级线程与内核级线程
一.多进程是操作系统基本图像二.线程2.1线程引入可以切指令不切表,也就是资源不动,指令执行分开,更加轻量化,从而提高效率,保留并发优点,避免进程切换代价,也就引入了线程.2.2多线程例子同时触发以及用yield交替执行104是B的函数返回地址,将104压栈,其他也是陆续压栈,用两个执行序列和一个栈,就会发现第一个线程,居然返回的函数地址是404,也就是线程在乱跑.解决办法,一个序列一个栈,切回线程要将栈切回,用一个地方存放栈指针也就是TCB(threa...
2021-11-07 15:26:21 1033
原创 操作系统--多进程管理CPU
一.cpu管理直观做法:cpu一直在循环取址执行,所以只需要设好pc初值即可存在问题:io会占用时间长,导致cpu利用率低.所以需要不停切换,执行多个程序,也就是并发.但是在切换的时候,除了记录返回地址,还要记录当前执行程序运行时刻(也就引入进程),就像人看书一样有人打扰,需要做个记号,下次接着看.使用的是PCB(Process Control Block)的数据结构来记录进程信息,这是操作系统中最重要的结构.总结:用多进程管理cpu.二.多进程图像 ...
2021-10-31 12:31:26 1058
原创 MSE和Cross-entropy梯度更新比较
一.平方损失(MSE)Loss函数:梯度:由于x,y是已知的,故可以忽略掉梯度更新: sigmoid函数:可以看出 导数在z取大部分值,都是很小的,这样会使梯度更新慢.y为1或0是,当a=1,w的梯度为0,a=0,w的梯度为0,故就能看出梯度更新慢.二.交叉熵损失(Cross-entropy)梯度更新比较图可看出逻辑回归比MSE慢.Loss函数:简写形式:梯度更新:由于没有导数那一项,导致梯度更新...
2021-10-12 01:45:00 733
原创 seaborn的一些画图
一.数据查看数据集地址,用红白酒为例.import pandas as pdimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib as mplimport numpy as npimport seaborn as snswhite_wine = pd.read_csv('winequality-white.csv', sep=';')red_wine = pd.
2021-10-04 22:54:13 388
原创 leetcode哈希表(python与c++)
1.整数转罗马数字python:class Solution: def intToRoman(self, num: int) -> str: dict_ = {1000:'M', 900:'CM', 500:'D', 400:'CD', 100:'C', 90:'XC', 50:'L', 40:'XL', 10:'X', 9:'IX', 5:'V', 4:'IV', 1:'I'} res = '' for key in dict_:
2021-09-23 23:49:01 320
原创 小孔成像中四个坐标系转换
一.小孔成像基础知识:1.1透镜成像原理如图所示:其中 u 为物距, f 为焦距,v 为相距。三者满足关系式:相机的镜头是一组透镜,当平行于主光轴的光线穿过透镜时,会聚到一点上,这个点叫做焦点,焦点到透镜中心的距离叫做焦距 f。数码相机的镜头相当于一个凸透镜,感光元件就处在这个凸透镜的焦点附近,将焦距近似为凸透镜中心到感光元件的距离时就成为小孔成像模型。小孔成像模型如图所示。为了计算方便一般采用对称成像平面来进行计算.二.四个坐标转换2.1 背景世界坐标系,相...
2021-09-05 11:51:21 2647
原创 leetcode动态规划(python与c++)
1 .斐波那契数class Solution: def fib(self, n: int) -> int: # if n==0: # return 0 # elif n==1: # return 1 # else: # return self.fib(n-1)+self.fib(n-2) a =0 b =1 ...
2021-08-30 23:23:27 409
原创 一些数据增强手段
1.mixupdef mixup_data(x, y, alpha=1.0, use_cuda=True): '''Compute the mixup data. Return mixed inputs, pairs of targets, and lambda''' if alpha > 0.: lam = np.random.beta(alpha, alpha) else: lam = 1. batch_size = x.si
2021-07-15 11:51:20 207
原创 C++模板的一些基础知识
.函数模板将类型作为参数,用template修饰函数模板,解决不同类型函数但实现逻辑一样的问题demo.cpp#include <iostream>using namespace std;template <typename T>//函数模板void display(T a){ cout<<"a:"<<a<<endl; cout<<"======="<<endl;}
2021-06-07 11:18:42 233
原创 C++ opencv的一些基础知识
一.一些api1.构建矩阵#include "iostream"#include <opencv2/opencv.hpp>#include "opencv2/dnn/dnn.hpp"#include "opencv2/imgcodecs/imgcodecs.hpp"#include <vector>using namespace std;cv::Mat scalar_demo1(){ cv::Mat M(4,4,CV_32FC2,cv::Scalar(
2021-06-03 10:25:35 3403
原创 gdb基础知识
在CMakeLists.txt中添加set(CMAKE_BUILD_TYPE Debug)然后make以后通过gdb filename进入该文件的gdb调试模式,同时使用shell 就可以像终端一样使用shell命令。例子:demo.cpp#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;c.
2021-05-22 20:58:24 629
原创 设计模式--观察者模式
最近看设计模式,其中谈及到观察者模式.可以理解为被观察者对外提供注册机制,观察者可以通过插入和移除实现订阅和取消订阅消息的功能,无论观察者有没有注册, 都不会影响被观察者发布消息.而这在mmdetection中体现的很好.举个例子来观察每天我的生活:其中register_hook用来注册HOOK来判断是否要观察我的每天生活.import sysclass HOOK: def before_getup(self, runner): print('{}:赖床30
2021-05-12 11:05:45 111
原创 String和STL的一些基础知识
STL的六大组件:容器,算法,迭代器,仿函数,适配器(配接器),空间配置器1.容器:各种数据结构,vector,list,deque;2.算法:各种常用算法,sort,find,copy;3.迭代器:扮演了容器与算法之间的胶合剂,他两之间的桥梁;4.仿函数:行为类似函数,可作为算法的某种策略;5.适配器: 一种用来修饰容器或者仿函数或迭代器接口的东西;6.空间配置器:负责空间的配置与管理。例如vector本质就是对数组的封装1.vector特点,读取能在常数时间完成.初始化ve
2021-05-07 22:28:49 352
原创 clion卸载+clion连接docker编写trt程序
由于本地机器没有gpu,学习trt加速模型很难受,经过一段时间摸索和请教别人,最后采用clion连接docker进行trt学习,下载安装很简单,这里主要介绍配置环境.1.docker的ssh服务,trt环境等需要配置好.2.设置工具链file->setting->Build,Exection,Deployment->Toolchains3.设置下面的cmake3.新建clion工程4.删除左侧项目的东西\5.设置显示保存tools->D
2021-04-29 13:24:16 1029
原创 git的一些操作
一.git工作原理/流程:workspace: (除去.git)看见的目录。版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。1.使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。2.使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。二.一.
2021-04-19 23:00:58 418
原创 leetcode hot100(第二部分) + python(c++)
50-1. 乘积最大子数组思路1:找到状态转移方程:maxf[i]:表示在i处最大连乘数minf[i]:表示在i处最小连乘数maxf[i] = max(nums[i],nums[i]*minf[i-1],nums[i]*maxf[i-1])minf[i] = min(nums[i],nums[i]*minf[i-1],nums[i]*maxf[i-1])#maxf[i]:表示在i处最大连乘数#minf[i]:表示在i处最小连乘数#maxf[i] = max(nums[i],num
2021-04-14 09:53:58 518
原创 ubuntu16.04编译安装c++ opencv与vscode配置debug
一.编译安装c++ opencv1.下载zip包本文安装的是opencv3.4.3,下载链接,以Sources方式下载zip包.2.安装依赖sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python
2021-03-31 21:33:57 467 2
原创 torch版ResNet50(带有多输出)转c++ tensorrt
第一个最简单的lenet示例请参考这篇文章一.torch阶段测试图片:torch代码:# coding:utf-8import torchfrom torch import nnfrom torch.nn import functional as Fimport torchvisionimport osimport structimport timeimport cv2import numpy as npdef main(): print('cuda d.
2021-03-30 14:07:45 4030 9
原创 vscode debug c++与opencv程序
一.工程代码1.本文调试代码文件夹截图为:2.代码细节:a.h:#ifndef A_H_#define A_H_ class A{ public: A(){} ~A(){} void readImg(const char* path); }; #endifa.cpp:#include<opencv2/opencv.hpp>#include <iostream>#include "a.h"using names
2021-03-28 15:14:48 640
原创 c++将.cpp编译为.so文件
1.首先看文件形式其中cpp1是直接调用.cpp和生成.so的文件夹。cpp2是测试生成的.so可以使用的文件夹。2.先直接编译.cpp检查代码没问题a.cpp内容:#include <iostream>#include "a.h"void A::readImg(char* path){ B b; b.readImg(path); }a.h内容:#ifndef A_H_#define A_H_ #include "b.h" c.
2021-03-24 14:33:34 14541
原创 leetcode hot100(第一部分) + python(c++)
1-1.两数之和思路1:两层for循环 O(n2)class Solution: def twoSum(self, nums, target): res = [] for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i]+nums[j]==target: res.extend(
2021-03-15 09:38:44 688 2
原创 RepVGG
论文链接一.背景:现在的一些复杂模型虽然有很高准确度,但是缺点也很明显:1.多分支,带来了速度的减慢和降低显存的使用率;2.Mobilenet虽然采用可分离卷积.shufflenet采用分组卷积,带来了flop降低,但是却增加了内存的访问成本(MAC)二.网络结构1. 模型RepVGG在train和inference和ResNet的差异,可看出train时除了引入残差分支和1*1卷积分支,同时为了方便参数化重构,没有跨层连接.2. 3*3卷积核优势在N卡和MKL等
2021-03-05 11:23:06 904 2
原创 二叉树的一些leetcode题目+python(c++)
二叉树考点主要有:1.三种遍历方式;2.求深度3.判断平衡性1-1.前序遍历思路1:递归法# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def helper(s.
2021-02-21 10:36:06 323
原创 链表的一些leetcode题目+python(c++)
主要常见下面几个知识点:1-1.请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteNode(self, node): .
2021-02-20 19:01:13 425
原创 python(c++)刷题+剑指offer
53-1. 在排序数组中查找数字 I思路1:hashclass Solution: def search(self, nums, target): dict_={} for i in range(len(nums)): dict_[nums[i]] = dict_.get(nums[i],0)+1 print(dict_) return dict_[target] if target in dict
2021-02-16 12:09:12 1103 2
原创 python刷题+leetcode(第三部分)
200.最大正方形思路:与岛屿,水塘不同的是这个相对要规则得多,而不是求连通域,所以动态规划构造出状态转移方程即可动态规划 if 0, dp[i][j] =0if 1, dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1class Solution: def maximalSquare(self, matrix): print('==np.array(matrix):\n', np.array(matri
2021-01-23 15:32:16 2317 4
原创 tensorrt基础知识+torch版lenet转c++ trt
1.优化流程:制作engine:大概就是c++api写的网络结构或者其他第三方格式,经过NetworkDefinition进行定义,采用builder加载模型权重,进行一些参数的优化,然后再用engine序列化成模型 。推理:采用engine反序列化,创建运行环境,在进行推理即可。参考:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#fit__fit1...
2021-01-15 16:32:27 2120 5
zxing-cpp.tar.gz
2020-08-19
android4.0客户端名片识别
2016-05-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人