- 博客(42)
- 收藏
- 关注
原创 C++ 多态之虚函数表并通过虚函数表调用虚函数
文章目录一 前言引入二 验证虚函数表的存在并调用三 this指针做为成员方法的隐藏参数一 前言引入 虚函数在多态中可以说非常重要,因此关于虚函数的底层实现,我们有必要了解。首先我们来看以下代码。class Animal {public : Animal() = default; Animal(int x, double y) : x(x), y(y) {} void run() { cout << "I don't know how to run
2020-09-25 20:47:44 1091 2
原创 毕业喽 ! ——为赋新词强说愁
返校便是中期答辩、码代码、写材料、开组会,不断进行,直到前不久刚结束的毕设论文,结题答辩,拍毕业照以及同门朋友聚会。硕士期间给我最大感受就是:“赶”,忙完这个忙那个,出现挫折,情绪低落的时候,真想去TM的,老子不伺候了,爱咋样咋样!不过操场跑圈发泄后,还是要像余华所说的那样:“在夜深人静的时候,把心掏出来,自己缝缝补补,然后睡一觉醒来,又是信心百倍。无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事情,而不是让烦恼和焦虑,毁掉你本就不多的热情和定力。
2023-07-01 09:33:00 488 3
原创 数字水印之JPEG压缩不可微分导致网络无法端到端训练的解决方法(附PyTorch代码)
(5) 之后就是量化,亮度分量和色度分量各自对应不同的量化表,用DCT变换所得结果除以量化表,对于除不尽的小数部分直接进行截断操作(忘记是直接舍去小数点后的部分还是四舍五入取整,似乎是后者,看官若确定,可在评论区指出),量化这一步会极大压缩图像的高频分量,JPEG压缩的核心所在就是量化这一步,也正是因为量化取整的操作,才导致量化之前JPEG压缩是可逆的,但是量化之后,图像变换就不可逆了,即使后续解码显示图片,也会存在一定的精度损失。)如下所示的方式进行操作。
2023-06-30 11:31:06 1614
原创 C++运算符重载 (含代码)
文章目录一 概念介绍二 代码演示一 概念介绍 当运算符作用于自定义的类类型的运算对象时,需要通过运算符重载重新定义该运算的含义。重载的运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后要定义的运算符号共同组成,如operator+。和其他函数一样,重载的运算符也包含返回类型、函数名、参数列表以及函数体。 运算符重载按照重载函数定义位置的不同可分为两类:一类是在类内,作为类的成员方法;另一种是定义在类外的非成员函数,即普通的全局函数。对于类内成员方法:函数仅一个参数,运算符左
2022-01-17 20:52:34 1093
原创 Ubuntu20.04 更换3T机械硬盘操作流程
文章目录一 遇到的问题二 操作流程三 参考文献 电脑之前2T的机械硬盘磁道损坏(sudo apt update & upgrade之后出现了问题,重新开机后软件的logo特别大,肯定是显卡驱动出现了问题,但是电脑卡死,想重装显卡驱动都做不到,于是重装系统,但是由于磁道损坏,系统都重装不上Wu~~~~),磁盘扫描工具扫描之后发现机械硬盘中存在损坏的磁道,于是取下机械硬盘部分,仅用SSD固态重装了系统,重装系统成功。之后购入3T新机械硬盘,记录在Ubuntu20.04系统下的安装过程 (作为笔记,
2021-10-04 12:06:37 835
原创 opencv-python 一: 图像和视频的读取、保存等基本操作
文章目录一 图片读取保存及通道转换1. 彩色图像的读取和显示2. 得到灰度图的两种方法3. 三种从BGR到RGB的通道转换方法4. ROI区域二 读取并显示视频1. 读取视频2. get()方法获取视频属性一 图片读取保存及通道转换1. 彩色图像的读取和显示import cv2import numpy as npimport matplotlib.pyplot as pltimport imageiodef cv_show_image(name, img): # 这个函数在下面会一直用
2021-08-17 17:27:10 1125
原创 SRNet隐写分析网络模型 (pytorch实现)
文章目录一 SRNet隐写分析模型介绍二 SRNet网络概述三 训练结果展示一 SRNet隐写分析模型介绍 SRNet模型是宾汉姆顿大学(Binghamton University)Jessica教授团队于2018年提出的图像隐写分析网络模型,应该说是当时SOTA(state-of-the-art)的隐写分析网络模型了,实验证明不论对空域隐写算法还是JEPG频域隐写算法,SRNet都有较好的检测性能。关于SRNet论文、官方代码和中文翻译分别如下所示:SRNet网络论文地址: https://
2021-07-11 17:40:29 8241 42
原创 图像隐写分析——生成含密图像 Stego Image
文章目录一 图像隐写分析的数据集二 含密图像展示三 结语一 图像隐写分析的数据集 小编本科毕设的题目是《基于深度学习的图像隐写分析》,图像隐写分析问题本质上是一个二分类(binary classifier)问题,即判断一张图片中是否含有隐秘信息,若包含隐秘信息则输出1,否则输出0。 注意区分隐写术&隐写分析 (Steganography&Steganalysis) 和 数字水印 (Digital WaterMarking) 两种技术,两者都是向图像或视频等信息载体中嵌入内容并且对
2021-07-09 13:22:48 5779 41
原创 机器学习之Gradient Descent 梯度下降理解
文章目录一 前言一 前言 在前一篇文章 机器学习之回归(Regression)再理解 中小编提到了梯度下降,我们知道在设定好损失函数后,只要loss函数是可微分的,我们就可以通过Gradient Descent 进行参数优化,不断的调整参数的值,使得loss函数的值越来越小。...
2021-03-10 17:16:09 621 1
原创 Gradient Descent 背后的数学原理
文章目录一 前言二 泰勒级数展开 Talyor Series三 公式推导四 结束语一 前言 Gradient Descent 大家都耳熟能详,即使是刚接触机器学习不到一周的初学者也早已经听过了梯度下降的大名,让每个人解释什么是Gradient Descent,大家多多少少也能说出来,但是背后的数学推理相信大家很少见到,在这里小编就毛遂自荐,尽自己所能说一说Gradient Descent 的公式是如何推理出来的。在本文中梯度、局部最优、全剧最优、鞍点等等一些基本的知识就不说了,相信大家心中都有大
2021-03-10 16:54:29 325
原创 机器学习之回归(Regression)再理解
文章目录一 前言引入1. 回归定义及应用场景2. 解决步骤3. 过拟合和解决方法二 回归问题再理解1. 问题提出2. 问题解决三 结束语一 前言引入1. 回归定义及应用场景 我们知道机器学习的过程其实就是一个找函数的过程,通过不断的训练我们最终得到一个函数映射,给定函数(网络)一个输入,函数(网络)会给出相应输出,若输出的是一个数值(scatter),我们可以将这一类机器学习的问题称为回归问题(Regression)举例如下: 上图中第一个例子为股票指数预测,函数输入为今天的股票数据信息,
2021-03-02 21:35:14 6283 1
原创 C++设计模式之单例模式
文章目录一 前言二 代码实现及改进1. 初版代码2. 多线程带来的影响三 饿汉模式和懒汉模式一 前言 单例模式是面向对象设计模式中的一种,什么是单例模式,单例模式就是指某个类只可以实例化出一个对象,不可以实例化出多个对象,在工程中单例模式有比较多的应用,例如http服务器类,对于某网络服务来说http服务器一般只有一个,所以http服务器对象一般只有一个,再比如创建和销毁比较平凡的工具类,为了减少频繁的创建和销毁对象造成计算机效率低下,也通常使用单例模式;还有线程池、打印机这些只需要一个对象的类。
2020-09-30 16:20:44 338
原创 C++ 多态性初步了解
文章目录一 前提引入一 前提引入 在说多态之前,我们先来看一段代码,猜测代码输出class Animal {public : Animal(const string &name) : __name(name) {} void run() { cout << "I don't know how to run" << endl; }protected : string __name;};class Cat : p
2020-09-25 16:14:10 318
原创 C++函数返回值优化(RVO)
文章目录一 函数返回值优化的引出1. 对象的初始化2. 代码实际输出和理论输出二 返回值优化(RVO)1. 优化方法一2. 优化方法二三 如何关闭函数返回值优化一 函数返回值优化的引出 在说C++函数返回值之前我们来看这样一份代码,代码如下:class A {public : A() { cout << "constructor" << endl; } A(const A &obj) { cout <
2020-09-17 17:35:02 1254
原创 Dijkstra算法求解单源最短路径问题
文章目录一 前言二 Dijkstra 算法讲解1. 贪心算法的证明2. 算法实现说明3. 初版Dijkstra算法代码三 时间复杂度优化1. 优化策略2. 优化后的代码四 结语一 前言 上一次的文章更新还是在5月份,现在都快8月份了,整整三个月没有记录学习的点点滴滴。哎,主要是现在自己面临读研的一系列事情,到现在面试结果也没有出来,如果没中,那真的要给老师,给招生办跪下了,呜~~~~~~, 小菜鸡在大佬面前瑟瑟发抖,给我一个读书的机会吧!!! 本次记录的是最短路径算法中的单源最短路经Dijkst
2020-07-25 22:12:08 1455
原创 MNIST机器学习入门(下篇)
文章目录MNIST手写数字识别(卷积池化)一 前言MNIST手写数字识别(卷积池化)一 前言在本博客之前,关于采用Softmax回归模型实现MNIST手写数字,在小编的另一篇博客:MNIST手写数字识别(Softmax回归)已经进行了阐述,感兴趣的小伙伴可以看看。在本博客中,小编主要总结采用CNN网络实现手写数字识别过程中自己的一些收获。...
2020-05-06 11:09:29 462
原创 MNIST机器学习入门(上篇)
MNIST手写数字识别(Softmax回归)一 前言 MNIST手写数字识别在TensorFlow中文社区中分为MNIST机器学习入门和深入两个部分,不管哪一部分,在机器学习领域中都只是“hello world”级别的存在,主要是让大家了解TensoFlow和CNN的一些基本概念,谁都想学好,但饭总要一口一口吃,先从最基本的入手,由浅到深才是正确的学习方式。 本可博客主要是记录学习MNI...
2020-05-05 15:45:45 463
原创 堆排序和优先队列
堆和优先队列一 引子 相信大家都接触过二叉树,而二叉树中有一个特殊的树——完全二叉树,若我们从上到下,从左到右,将每一个结点从1开始编号,完成后,我们可以得到这样一个规律:若某个结点的编号是 i,那该结点的左孩子的编号是2 * i,右孩子的编号是 2 * i + 1,为此我们可以用数组来存储这棵完全二叉树。 示意图如下:了解完全二叉树的这个性质之后,我们接着来了解堆排序和优先队列...
2020-04-24 10:50:34 336
原创 AVL平衡二叉排序树 (C语言)
文章目录一 前言二 平衡二叉排序树阐述1. 二叉排序树的不足2. 平衡二叉排序树的性质3. 平衡二叉排序树效率分析4. 左旋、右旋以及四种失衡类型一 前言 在了解平衡二叉排序树前,请大家务必掌握 BS二叉排序树的相关概念,关于二叉排序树的代码实现,小编另一篇博客: 二叉排序树结点的插入与删除操作 中有详细介绍,此处不再赘述,咱们直奔主题!!!二 平衡二叉排序树阐述1. 二叉排序树的不足...
2020-04-24 10:32:41 768 1
原创 ubuntu18.04 安装GPU版本tensorflow
文章目录一 前言二 安装nvidia显卡驱动一 前言 大二下学期的时候,小编接触了机器学习,当时在windows下从最初的cpu版本的 tensorflow 到 anaconda、cuda、cudnn的安装,也算是从简到繁,有所进步。现在笔记本安装ubuntu系统之后却一直没有配置机器学习的环境,近日闲来无事,就想要拣一拣 (好吧,其实和重新学习没什么区别 ???? ),加油,事情总要一步一步来...
2020-04-22 17:17:33 991
原创 爬取百度贴吧照片并保存在本地 (python/BeautifulSoup)
一 前言 自从大二学习python,了解爬虫和机器学习(当然只是皮毛罢了)认真学习了大概一个多月后,自己就因为考试等其他各方面的因素将python弃置高阁,很久没有用了。 现在回头来看,后悔不已,只好捡起来,重新回顾,整理知识点。伤心的话就不说了,从现在开始,加油努力干!二 实现百度贴吧照片的爬取代码如下:import requestsimport reimport lxmlf...
2020-04-19 11:21:41 542
原创 子进程和exec族函数的使用(Linux C)
文章目录一 子进程的概念和创建二 fork()函数举例和父子进程执行三 exec族函数一 子进程的概念和创建关于进程相关概念,在计算机操作系统课程中已经详细介绍了,小编就不再班门弄斧。但想强调的是:进程是系统进行资源调度和分配的基本单位。程序和进程之间不存在一一对应的关系,一个程序可以对应多个的进程,一个进程也可以对应多个程序;程序是静态的,存储在计算机磁盘中,进程是动态的,存在生命周期...
2020-03-27 14:15:31 2007
原创 网络编程基本函数总结
文章目录计算机网络编程一 Socket套接字、IP地址、Port端口号的定义1. Socket套接字2. IP地址3. 端口二 通过socket()函数创建一个套接字三 服务器端采用bind()函数将socket与IP地址和port端口号绑定四 connect()与accept()函数五 listen()函数六 send()和recv()函数七 close()关闭连接八 getpee...
2020-03-25 16:35:52 943
原创 shell脚本编程语言基础
shell 脚本编程一 两种脚本运行方式#!/bin/bash 表示该脚本语言的解释器两种运行脚本方式:bash filename 运行脚本文件还可以使用source filename来运行文件(主要是用于执行sh文件中的单个函数)尽量不要使用,因为更改了.bashrc、.bash_profile文件。chmod 将脚本变成可执行文件,添加到PATH路径中,直接输入文件名执行。...
2020-03-20 17:34:29 434
原创 console、terminal、shell区别及shell入门
shell 基本知识一 console、Terminal、shell三者之间的区别 这还要从之前的大型主机,用多任务多用户的那种说起。学习机电的同学应该知道,对于一个机床,会有一个布满控制开关的台面,可以操作台面上的开关控制机床的运行。同样,计算机也存在这样的一个控制台,用于控制计算机运行,这就是console(控制台)。 Terminal(终端),对于多用户多任务的计算机,会连出很...
2020-03-20 17:01:42 2076
原创 C语言程序从编写到运行历经的几个阶段
C语言程序从编写到运行历经的几个阶段一 前言 在完成 .c 或 .cpp 文件的编写后,我们通常直接 gcc 或 g++ 后接文件名,就可以在当前文件夹下生成 a.out 可执行文件, 之后输入 ./a.out 即可执行该二进制可执行文件。 但实际上C语言程序从编写到运行,这期间的经历并不是这么简单,那么现在小编就带领大家探索,这期间具体有哪几个步骤?一 过程简介 从上图可知从C...
2020-03-19 21:20:41 19773
原创 操作系统发展历程 (Unix、Linux、windows)
文章目录一 操作系统概念的诞生二 Unix系统的诞生三 Linux的诞生四 Linux的几大分支五 微软、苹果的发展和恩恩怨怨一 操作系统概念的诞生 说到操作系统的诞生,就要先说一说计算机的发展历程了。 世界上最受大家认可的时间是:1946年2月,在美国的宾夕法尼亚大学诞生了世界上第一台电子计算机,该计算机是由大量的电子管组成,所以十分的庞大。它的设计初衷帮助美国国防部计算导弹的飞行轨...
2020-03-13 16:45:37 9350 3
原创 整形数字、(C++字符串)string、(C类型字符串)char *之间的转换
整形数字、(C++字符串)string、(C类型字符串)char *之间的转换将数字转换为char *类型的字符串char str[15];int num = 123456;sprintf(str, "%d", num); printf("str = %s\n", str);//除sprintf()函数之外后还有itoa()函数//value将要转换的值,str结果,对应的进制...
2020-03-04 22:48:46 347
原创 C语言实现循环队列的构建、入队、出队、扩容、遍历等操作
C语言实现循环队列的构建、入队、出队、扩容、遍历等操作一 队列的定义和初始化 在C++的STL中有queue可以直接使用,小编这里采用C语言实现队列的基本操作,毕竟学会自己“造轮子”而不是拿来主义,可以更深刻的体会队列的性质。 队列最大的性质就是先进先出,元素只可以从队尾入队,从队首出队列。至于队列和循环队列之间的区别,不及,我们后面会说。 话不多说,我们直接看数据结构定义:typ...
2020-03-02 20:34:56 2410
原创 C语言实现栈的构建、入栈、出栈、取栈顶元素等基本操作
C语言实现栈的构建、入栈、出栈、取栈顶元素等基本操作一 栈的定义 在文章的开头,小编强调一句:小编知道C++的STL中有现成的stack,可以直接拿来用,但是这里小编还是用C语言来实现stack的基本操作,请大家不要喷小编,小编伤不起呀!!! 栈最重要的性质是:后进先出。性质大家都知道,关键是如何运用栈后进先出的性质解决题目。 好了,话不多说,咱们直接进入正题,其结构定义如下:ty...
2020-03-02 17:20:06 8988 1
原创 插入、冒泡、归并、选择、快速排序算法以及二分、三分查找算法
六种排序与两种查找算法一 排序算法 (此处的排序均为升序排列) 排序算法总的来说可以分成内部排序和外部排序 (内外是相对内存而言的,对于内部排序算法,它需要将数据全部加载入内存,才可以进行排序,而外部排序可以将数据分批加载进入内存,进行排序,比如:归并排序); 此外排序算法还可以分为稳定排序和非稳定排序 (若之前A(i) == A(j) && i < j,那...
2020-02-28 17:19:52 720
原创 二叉排序树结点的插入与删除操作
二叉排序树结点的插入与删除操作一 二叉排序树的性质 二叉排序树,又称二叉搜索树,它最重要的性质就是:根结点左子树中所有结点的值均小于根结点值,右子树中所有结点的值都大于根结点的值,所以我们在中序遍历这棵二叉树时,将会得到一个升序序列,这也是我们验证二叉排序树的一个手段。 对应的数据结构定义为:typedef struct Node { //一个数据域和左右两个指针域 int ...
2020-02-28 10:48:57 5020 1
原创 二叉树的构建、遍历、转广义表等基本操作
二叉树的构建、遍历、转广义表等基本操作一 结构定义 二叉树我们可以分成两个部分:结点和边,这一点和图是一样的,其中结点代表事件,那么边就代表着事件之间的关系。 此外,每一个结点我们都可以看成其左右子结点的并集;换句话说,一个结点的左右孩子结点取并集,那么并集就可以代表这个结点;因此我们不难得到:树 这种数据结构对应的是一系列完全包含关系 (这一点很重要)。 此外之前我们说过有一种数据...
2020-02-27 14:34:26 769
原创 链表实现增删改查等基本操作
链表实现增删改查等基本操作当数据结构是线性结构时,我们可以用顺序表或者是链表实现,上一篇我们用顺序表实现,这一次我们用链表实现。首先为了便于程序的演示以及说明,我们先定义相应的数据结构如下:typedef struct ListNode { //链表结点对应的结构体,包含数据域和指向下一个结点的指针域 int data; struct ListNode *next;} ...
2020-02-12 13:50:48 1017
原创 线性表实现增删改查等基本操作
线性表实现 增删改查 等基本操作当数据结构是线性结构时,我们可以用顺序表或者是链表实现,此处我们先讨论顺序表的一些基本操作首先为了便于程序的演示以及说明,我们先定义相应的数据结构如下:typedef struct Vector { int size, length; //顺序表的总体大小以及现有长度 int *data; //data指向存储数据数组的首地址...
2020-02-03 18:32:45 2429
原创 记忆化搜索以及记忆数组大小的影响
记忆化搜索以及记忆数组大小的影响一 问题的引入小编在回顾欧拉计划时遇到记忆化搜索问题,略有感触,感觉有必要和大家分享。话不多说咱们直接上截图:问题大意:一个数,若为偶数,则它下一次将变化为n / 2;若为奇数,则将变化为3 * n + 1;这样变化最后一定会以1结尾,为此,我们得到一个转换序列。现在我们要做的就是在1~1000000之间,找到一个数,该数字对应的转换序列的长度最长。...
2020-01-23 15:06:07 466
原创 数组传参以及二维数组的动态创建
数组传参以及二维数组的动态创建一 普通一维数组的参数传递一维数组的创建以及参数传递比较简单,小编在这就直接代码演示,不做过多描述#include <iostream>#include <cstring>using namespace std;//或者是int demo(int arr[], int n) {}//但若是二维或多维数组传参,没这么简单int ...
2020-01-17 14:39:22 257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人