机器学习class_2
机器学习任务攻略
Optimizationlocal minima or saddle point ?站在更高的维度,或许 local minima 只是 saddle point怎么解决呢?
Batch and MomentumLarge Batch vs Small BatchLarge Batch:冷却长,伤害高Small Batch:冷却短,伤害低但是由于gpu能做并行计算,large batch时间可以与small batch时间差不多,这样1个epoch时间large batch反而短很多
Momentum
MNIST手写数字识别
MNIST手写数字识别实战train test12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879import torchimport torchvisionfrom torch import nnfrom torch.utils.data import DataLoaderfrom torch.utils.tensorboard import SummaryWritertrain_data=torchvision.datasets.MNIST("../dataset",train=True,transform=torchvision.transforms.ToTensor(),download=True)test_data=torchvision.datasets.MNIST("../dataset", ...
算法基础--数据结构(一)
数据结构(一)单链表123456789101112131415161718192021222324const int N=1e5+10;int head,e[N],ne[N],idx;//head表示头结点的指针,ne[]里记录下标void init(){ head=-1; idx=0;}void insert_head(int x)//链表头插入{ e[idx]=x; ne[idx]=head; head=idx; idx++;}void insert_k(int k,int x)//第k个元素之后插入{ e[idx]=x; ne[idx]=ne[k]; ne[k]=idx; idx++;}
双链表12345678910111213141516171819202122const int N=1e5+10;int l[N],r[N],e[N],idx;//偷懒一点,直接把编号0的节点作为头节点,编号为1的节点作为尾节点void init(){ r[0] ...
四、算法基础(四)
双指针板子for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ;
// 具体问题的逻辑
}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作
123456789101112131415161718192021222324252627#include <iostream>using namespace std;const int N=1e5+10;int a[N];int s[N];//记录每个数字出现次数,出现次数为2即重复int main(){ int n; cin>>n; for(int i=0;i<n;i++) scanf("%d",&a[i]); int res=0; for(int i=0,j=0;i<n ...
数据结构8--图的遍历及应用
图的遍历及应用深度优先搜索图中可能存在回路,为了避免重复访问,可用重复数组visited[]记录顶点是否被访问过
1234567891011121314void DFS(Vertex* Head,int v,int visited[]){ //访问顶点v visit(v); visited[v]=1; Edge* p=Head[v].adjacent; while(p!=NULL) { int k=p->VerAdj; if(visited[k]==0) DFS(Head,k,visited); p=p->link; }}
非连通图的深度优先遍历–需要多次调用DFS算法
123456for(int i=0;i<n;i++)//数组初始化 visited[i]=0;//以每个顶点为起点,试探能否深搜for(int i=0;i<n;i++) if(visited[i]==0) DFS(Head ...
数据结构7--树和二叉树的应用
树和二叉树的应用压缩与哈夫曼树最优编码问题设组成文件的字符集A={a1,a2,…an},其中ai出现的次数为ci,ai的编码成都为li,设计编码方案使min$\sum_{i=1}^{n}ci*li$
扩充二叉树
加权路径长度外结点权值为wi,深度为Li$WPL=\sum wi*Li$
一种文件编码方案可以映射为一颗扩充二叉树字符 ==> 外结点字符出现次数ci ==> 外结点权值wi字符的编码长度li ==> 外结点深度Li文件总编码长度 ==> 扩展二叉树WPL值
哈夫曼算法自下而上重复做:选择权值最小的两个结点来生成新结点,新结点作为原结点的父亲,权值是原来两个结点权值之和编码:每个左分支标记为0,右分支标记为1
哈夫曼树二子性 ==> n个叶结点,n-1个非叶结点,2n-1个总结点同权不同构 ==> 哈夫曼树形态不唯一,编码不唯一,WPL唯一,最小编码长度唯一
哈夫曼算法实现
1234567891 ...
Pytorch基础
Pytorch基础DataSet1234567891011121314151617181920212223from torch.utils.data import Datasetfrom PIL import Imageimport osclass MyData(Dataset): def __init__(self,train_dir,label_dir): self.train_dir=train_dir self.label_dir=label_dir self.train_path=os.listdir(self.train_dir) self.label_path=os.listdir(self.label_dir) def __getitem__(self,idx): img_name=self.train_path[idx] img_path=os.path.join(self.train_dir,img_name) img=Image.open(img_ ...
数据结构复习(六)
树的存储和操作树和二叉树的转换树转换二叉树右兄弟变右孩子
森林转换二叉树
二叉树转换树右孩子变右兄弟
二叉树转换森林从根出发,断开其与右孩子的连线,得到多个二叉树再按上述方法,将二叉树变成树
树的存储结构
双亲表示法
孩子表示法
先根序列及结点度表示法
后根序列及结点度表示法
层次序列及结点度表示法
父亲链接结构
孩子连接结构
父亲孩子连接结构
左孩子右兄弟连接结构
树和森林的遍历
数据结构复习(五)
线索二叉树基本概念做题先遍历,得出遍历顺序好连线
中序线索二叉树的基本操作
找线索二叉树的第一个结点
12345678TreeNode* FirstInorder(TreeNode* t){ TreeNode* p=t; while(p->LThread==0)//p有左孩子 p=p->left; return p;}
找线索二叉树的最后一个节点
12345678TreeNode* LastInorder(TreeNode* t){ TreeNode* p=t; while(p->LRThread==0)//p有右孩子 p=p->right; return p;}
找结点p的中根后继结点若p->Rthread==1,中根后继为p->right若p->Rthread==0,中根后继为其右子树的中根序列首结点
12345TreeNode* nextInorder(TreeNode* t){ ...
数据结构复习(四)
二叉树的存储与操作二叉树的存储结构
顺序存储即将左孩子存储在2i,将右孩子存储在2i+1比较适合完全二叉树,对于非完全二叉树有空间浪费
链接存储二叉链表:left data right三叉链表:left data parent right
二叉树的遍历及递归算法先序遍历1234567void Preorder(TreeNode* t){ if(t==NULL) return; visit(t->data); Preorder(t->left); Preorder(t->right);}
中序遍历1234567void Inorder(TreeNode* t){ if(t==NULL) return; Preorder(t->left); visit(t->data); Preorder(t->right);}
后序遍历1234567void Postorder(TreeNode* t){ if(t==NULL) return; P ...