- 博客(42)
- 收藏
- 关注
原创 pytorch实现残差网络restnet50
残差网络块为: 首先有输入通道, 输出通道, 用一个变量接受输入的x, 只有另一条路对这个x进行卷积运算。
2022-05-11 22:31:28
2833
1
原创 pytorch对网络层的增,删, 改, 修改预训练模型结构
1.我们使用vgg11网络做示例, 看一下网络结构:加载本地的模型:vgg16 = models.vgg16(pretrained=False) #打印出预训练模型的参数vgg16.load_state_dict(torch.load('vgg16-397923af.pth'))加载库中的模型import torchimport torch.nn as nnfrom torchvision import modelsnet = models.vgg11(pretrained
2022-05-07 23:53:24
13443
11
原创 pytorch加载自己的图片数据集的两种方法
pytorch加载图片数据集有两种方法。1.ImageFolder 适合于分类数据集,并且每一个类别的图片在同一个文件夹, ImageFolder加载的数据集, 训练数据为文件件下的图片, 训练标签是对应的文件夹, 每个文件夹为一个类别在Flower_Orig_dataset文件夹下有flower_orig 和 sunflower这两个文件夹, 这两个文件夹下放着同一个类别的图片。 使用 ImageFolder 加载的图片, 就会返回图片信息和对应的label信息, 但是label信息是根据文件
2022-04-20 22:46:44
23244
11
原创 pytorch预测泰坦尼克号生还率 pytorch加载csv数据集
先看一眼我们拿到的数据: 在数据中有浮点数, 有字符串, 现在我们要做的就是制作满足pytorch条件的数据集。1.先加载数据集2.选出我们需要的行3.将字符串类型数据转换成浮点数型4.将数据集保存在新的excel文件中1.使用pd.read_excel()方法读取excel表格中的数据#读取到excel文件中的数据集path = r'D:\数据集\泰坦尼克号\泰坦尼克号.xls'all_df = pd.read_excel(path)2. 选择出我们训练所..
2022-04-20 21:45:01
1792
2
原创 直接插入排序
方法类似于玩纸牌,基本思想是: 依次将待排序序列中的每一个记录插入到一个已经排好序的序列中,直到全部记录都排好序。排序过程:首先给定一个序列,序列是从i=1开始存储元素, 默认第一个元素是有序的.注意: 直接插入...
2021-11-12 15:36:52
955
原创 AOE网(带权有向无环图)
1. 用顶点表示事件, 用有向边表示活动,边上的权值表示活动的持续时间。 (事件:例如:完成外壳的生产, 活动:如生产外壳) 2. AOE网中没有入边的顶点称为源点,没有出边的顶点称为终点AOE网可以回答下列问题:1.完成整个工程至少需要多少时间 2. 为缩短完成工程...
2021-11-12 08:59:34
4308
原创 散列表的构建
散列表需要将关键码用散列技术进行存储,才可以进行散列查找,散列函数------除留余数法,开放定址法-----线性探测法(如果地址冲突,那就判断(a[i]+1)%p是否冲突,若不冲突,则放入数据, 若冲突,继续加1取余 )处理冲突的方法-----拉链法(链地址法)...
2021-11-11 22:53:26
1728
原创 二叉排序树
性质: 1. 若它的左子树不空,则左子树上所有结点的值均小于根节点的值 2. 如果它的右子树不空,则右子树上所有结点的值均大于根节点...
2021-11-11 22:26:33
808
原创 折半查找-
要求线性表中的记录必须是关键码有序,线性表必须采用顺序存储。思路:在有序表中,取中间记录作为比较对象, 若给定的值与中间记录的关键码相等,则查找成功,若给定的值小于中间记录的关键码,则在中间记录的左半区继续查找; 若给定的值大于中间记录的关键字,那就在中间记录的右半区查找, 不断重复,直到查找成功, 或者查找失败int Binart_Search(int a[], int n, int key){ int low, high,mid; //此数组从索引为1的位置开始查找 low ...
2021-11-10 16:24:23
1683
原创 AOV网--拓扑排序(必须是一个有向无环图)
特点: 1. AOV网用顶点表示活动,用弧表示活动之间优先关系, 2. AOV网中的弧表示活...
2021-11-10 15:38:23
2629
原创 最短路径(Floyd)
给定带权有向图 G=(V, E), 对任意顶点vi,vj 属于V,(i!=j) 求顶点vi到顶点vj的最短路径解决办法: 弗洛伊德提出的求每一对顶点之间的最短路径算法-----Floyd算法基本思想:对于
2021-11-06 16:02:18
853
原创 顺序表查找
顺序表查找是从末尾查找,但是一般的思路是判断数组元素和待查找元素k是否相等,之后再判断 是否越界(i>0), 需要两次判断,现在为了减少判断次数,则从索引 i=1开始存放数据,并且把待查找元素存储在索引i=0的位置, 之后开始遍历.代码实现:int SeqSearch(int r[], int n, int k){ //参数分别表示待查找数组,数组元素个数,待查找元素 r[0] = k; //设置哨兵,让待查找元素为 i=0的元素 i=n; ..
2021-11-05 10:03:34
1169
原创 Dijkstra算法(最短路径)
U为源点 S为未添加数组 邻接矩阵存放的是权值,创建dist[]数组,用来存放结点间的距离,首先将v结点加入U集合,之后更新dist[]数组的数值,再在U-S集合中找到一个权值最小的结点x,遍历x这一行,查看x到各个结点的距离,当x结点到m结点距离为5,此时用这个5去和dist[]数组到x的距离相加,如果相加得到的值比dist[]数组中的值小,则用这个值更新diist[]数组中到m中的权重值 ; 再次在dist[]数组中找最短路径**在dist数组中找最短路径是在未添加的数组值那查找,已经添加到源点的...
2021-10-31 17:53:15
16545
1
原创 图的一些常用术语.
顶点---------图中的每个数据元素,称为顶点. 没有结点的树称为空树,但是图中不能存在没有顶点的图.在图中任意两个顶点之间都有可能有关系,顶点之间的逻辑 关系用边表示.在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图,含有n个顶点的无向完全图有 (n * (n-1) / 2) 条边.在有向完全图中,如果任意两个顶点之间都存在互为相反的两条弧,称该图为有向完全图,含有n个顶点的有向完全图有 (n*(n-1))条边 假设有两个图G=(V,{E}) G`=(V`...
2021-10-30 10:00:24
215
原创 Kruskal算法--学习笔记
1.最小生成树是在图 (邻接矩阵) 中选择出一个权值累加和最小的树,所以自己首先需要构建一个图(邻接矩阵)。Kruskal和prim算法在存储结构上不同,因为Kruskal算法需要或者哪个是最短边,之前的存储方式需要遍历所有边才能知道哪个是最短边.问题1.如何判断被考察边的两个顶点是否位于两个连同分量? 答:根据所属的树是否有相同的根节点。...
2021-10-27 23:01:10
266
原创 最小生成树(Prim算法)笔记
引言:最小生成树是在图 (邻接矩阵) 中选择出一个权值累加和最小的树,所以自己首先需要构建一个图(邻接矩阵)。如: v0 --> v2 = ∞,说明v0到v2这两个结点没有边 v0-->v0=0,说明是自身结点 v1->v0=10,表示v1->v0结点的权重为10。思路:1给定以顶点v开始, 现在用v来初始化辅助数组shortEdge,2.给定其实结点v,从v结点开始生成树. 首先将v结点加入生成树.3.之后进入循环n-1次循环,因为n个顶点,v结点...
2021-10-27 21:30:10
2936
原创 简单选择排序
在一个数组中,让min=i,因为每次都网i插入,所以i前面是有序的第一个for循环是用来比较 n-1趟的,第二个for循环是从i开始往后的元素查找最小元素的下标, 当发现一个值比min的小,就更新min的值,这样没找到一个最小的,就给min,下次比较就和这个新的min值比较void selectSort(int r[], int n){ for(int i=0; i<n-1; i++){ //这个for循环是用来控制插入次数, int min = i; .
2021-10-24 19:05:05
1881
原创 快速排序学习笔记
每个子序列开始,以第一个元素作为中轴int partition(int a[], int first, int end){ int i = first; int j = end; while(i<j){ //这个循环是用来判断是否找到中轴 i<j说明没找到 while(i<j && a[i]<a[j]) //这个循环是,当右边的元素比中轴大时候,移动下标,不交换啊 j--; if(i<j){ //当j元素
2021-10-24 18:39:10
307
原创 冒泡排序优化
exchange-----用于记录最后一次交换的下标,从次位置以后所有记录均已有序bount-----是记录无序区的最后一个元素,则每趟排序从0~bound的范围进行判断什么时候冒泡结束呢-----在排序开始时,令exchange的初值为0,在以后的排序过程中,只要交换,exchange的值就会大于0,当不存在交换的时候,就不需要排序了void bubbleSort(int r[], int n]){ int exchange = n-1; //让exch
2021-10-24 17:20:16
1093
原创 BF(模式匹配)算法笔记
就是说,在主串中查找是否有一个子串和想要的串各个元素都形同算法思路:1. 利用循环,当主串(S)和字串(T)都不为空,则进行匹配2.1 如果S[i] = T[i],则比较下一个字符2.2 否则将i回溯,准备下一趟。3. 如果T(字串)中所有字符都比较完,说明在主串中找到了字串,则匹配成功.如果主串S中所有字符都比较完了,说明比较完主串,还是没有匹配到字串,则匹配失败int BF(string S,string T){ int i=0,j=0; wh.
2021-10-18 23:50:38
113
原创 Map常见操作合集
所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。map构造函数map<T1, T2> mapTT;//map默认构造函数: map赋值操作map& operator=(const map &mp);//重载等号操作符swap(mp);//交换两个集合容器map大小操作size();//返回容器中元素的数目empty();//判断容.
2021-10-18 23:09:40
1371
原创 set/multiset常用操作
所有元素都会根据元素的键值自动被排序。set的元素即是键值又是实值。Set不允许两个元素有相同的键值set构造函数set<T> st;//set默认构造函数:mulitset<T> mst; //multiset默认构造函数: set赋值操作set& operator=(const set &st);//重载等号操作符swap(st);//交换两个集合容器set大小操作size();//返回容器中元素的数目empty();//判断容器.
2021-10-18 23:00:55
159
原创 list容器
List容器是一个双向链表创建对象list<T> lstT;//list采用采用模板类实现,对象的默认构造形式:list(beg,end);//构造函数将[beg, end)区间中的元素拷贝给本身。list(n,elem);//构造函数将n个elem拷贝给本身。list(const list &lst);//拷贝构造函数list数据元素插入和删除操作push_back(elem);//在容器尾部加入一个元素pop_back();//删除容器中最后一个元素pus
2021-10-18 08:05:14
113
原创 Queue基本操作
queue没有迭代器所以queue不允许随机访问,不允许随机访问的都没有迭代器queue构造函数queue<T> queT;//queue采用模板类实现,queue对象的默认构造形式:queue存取、插入和删除操作push(elem);//往队尾添加元素pop();//从队头移除第一个元素back();//返回最后一个元素front();//返回第一个元素queue赋值操作queue& operator=(const queue &que);//重载
2021-10-18 08:01:04
862
原创 Stack基本使用
Stack所有元素的进出都必须符合”先进后出”的条件,只有stack顶端的元素,才有机会被外界取用。Stack不提供遍历功能,也不提供迭代器。stack没有迭代器 stack<int> st; //创建一个栈对象 st.push(i); //push(i)将i压入栈 st.top(); //top()取栈顶元素 st.pop(); //pop()将栈顶元素出栈 st.empty(); //true=1;false=0
2021-10-18 07:57:21
344
原创 deque常用操作
来搜deque操作的想必都知道什么是deque了吧,我就不在这里赘述了 。下面是常用操作deque<int> dq; //定义一个储存整型变量的双端队列dqdeque双端插入和删除操作push_back(elem);//在容器尾部添加一个数据push_front(elem);//在容器头部插入一个数据pop_back();//删除容器最后一个数据pop_front();//删除容器第一个数据deque数据存取at(idx);//返回索引idx所指的数据,如果idx越界,
2021-10-17 23:48:26
643
原创 vector的常用操作
//定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值vector<int>a(10);//返回a的最后一个元素a.back();//返回a的第一个元素a.front();//返回a的第i元素,当且仅当a存在a[i];//清空a中的元素a.clear();//判断a是否为空,空则返回true,非空则返回falsea.empty();//删除a向量的最后一个元素a.pop_back();//在a的最后一个向..
2021-10-17 23:38:59
269
原创 C++链队列进队,出队及其他操作
队列图示:创建结点类型:class node{ public: int data; node *next;};建立队列类:class Queue{ public: node *front,*rear; //定义两个结点类型的指针,一个是头用于出队,一个是尾用于入队 Queue(){ front = NULL; rear = NULL; } void push(int x); //入队操作 int pop();
2021-10-17 18:33:29
1128
原创 C++链栈的入栈,出栈及其他操作
如果有什么错误,烦请各位大佬指出了,这只是我的学习笔记.定义栈结点的结构类型class node{ public: int data; node *next;}; 声明栈类,及入栈 和出栈的操作//栈不需要头节点,直接在top指针操作,所以不需要在构造函数中给top申请地址 //插入操作,直接申请一个结点,将top = s;这样对top操作就是对栈顶的操作 class Stack{ public: node *top; Stack(){ //z利用构造函.
2021-10-17 12:00:36
6291
原创 C++两栈共享空间
两栈共享空间就是定义一个数组,对数组的两端进行操作的栈。栈的插入操作步骤:首先判断栈是否已经满了, 当top1 = top2 - 1时候,说明栈已经满了,不能再插入了否则没有满,判断要往那个栈插入,往栈1插入,就--top1,因为从前往后插, 如果是栈2,就--top2,因为是从数组后往插入,所以插入的索引位置应该往前移动.const int MAXSIZE = 100;class stack{ public: int data[MAXSIZE]; ..
2021-10-17 11:03:17
945
1
原创 哈夫曼树的建立
存储结构:class node{ public: int weight; 权值域,保存该节点的权值 int lchild; 指针域,结点的左孩子在数组中的下标 int rchild; 指针域 结点的右孩子在数组中的下标 int parent; 指针域,该节点的双亲结点在数组中的下标}性质:在构建哈夫曼树的过程,只有出度为0和2的结点,在二叉树中 n0 = n2 + 1 ------》 n2 = n0-1 代入...
2021-10-16 23:06:42
820
原创 C++根据前序-中序 中序-后序的方式确定二叉树
一.根据前序-中序方式确定二叉树记住两句话,先用前序用来确定根节点,知道根节点后再用中序用来确定根节点的左右子树前序:E, F, H, I, G, J, K 后序:H, F, I, E, J, K, G1.由前序可知,E为根节点, 现在去中序找E结点,E结点左边的元素为E结点的左子树,E结点右边的元素为E结点的右子树,所以H,F,I为E的左子树,J,K,G为E结点的右子树2.再看前序可知,F为根节点,在中序找到F,F结点左边...
2021-10-16 19:42:57
2111
原创 C++二叉树的层序遍历
// 先将根节点入队 之后进入循环,当队列不为空时候,开始访问队列元素.首先根节点出队,访问根节点,再将根节点的左右孩子入队,继续循环,访问队列首元素,之后将队列首元素出队并把首元素的左右孩子结点入队,继续循环操作。直到队列为空 void leaver(node *bt){ queue<node*> q; //用STL建立一个队列 if(bt==NULL){ //如果是空树,则退出 return; } else{ ...
2021-10-15 18:35:58
397
原创 树,森林,与二叉树的转换
****这是我学完b站懒猫老师的课程做的笔记.1.树--->二叉树 1.1加线---树中所有兄弟结点之间加一条线. 1.2去线---对数中的每个结点,只保留它与第一个孩子结点间的连线,删去它与其他孩子结点 之间的连线 1.3层次调整---以根结点为轴心,将树顺时针转动一定的角度,使之层次分明.性质:1. 树的前序遍历等价于二叉树的前序遍历2. 树的后序遍历等价于二叉树的中序遍历森林----->...
2021-10-15 12:25:58
183
原创 前序, 中序遍历线索二叉树
//查找某个结点的后继ThreadNode* next(ThreadNode *p) //参数传入一个你想要查找的那个结点的地址,返回该结点的后继结点{ if(p->ltag == 1) //右标志为1,说明是被线索化的后继结点,可直接得到后继结点 { q = p->rchild; //q是一个静态变量或者一个属性变量,直接可以得到他的右孩子 } else //说明他的有右孩子,应该通过递归找下一个结点,但是现在有ltag,.
2021-10-14 22:21:18
535
1
原创 先序,中序线索二叉树的建立
二叉树的 遍历方式有4种,前序线索二叉树,中序线索二叉树,后序线索二叉树,层序线索二叉树。此处使用中序线索二叉树举例,其他三种建立方式类似,只是代码位置不同。//创建线索二叉树结点结构class node{ public: char data; node *lchild,rchild; int ltag,rtag;};当ltag=0和rtag=0的时候,表示*lchild和*rchild含义不变,任然指向他们的左孩子和右孩子;当.
2021-10-13 23:05:05
2983
原创 利用前序遍历的方式打印叶子节点
这是我的学习笔记,在我调试代码中发现的错误,可能你也有这样的错误,希望能帮助到你。语句(if bt==NULL)return;在这里是需要的,一开始我没有写这句话,是因为我觉得有if((bt->lchild==NULL)&&(bt->rchild==NULL))语句就够了,但事实运行的时候就会进入死循环 。回头想想确实是有错误,现在来缕一缕思路.解释:如果没有这句话,就会一直调用print_node()函数,当bt->lchild=NULL.
2021-10-13 21:25:10
369
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人