Batch and Momentum
Batch and MomentumSmall batch vs Large Batch左边是选取所有的资料,右边是每次选一个batch如果很大更新参数就比较慢,需要很长时间才能更新一次参数,而batch小的话更新参数就比较快,但是他的每一步都是不稳的。如果有并行运算,那么左边所花的时间也不一定很长。如果批次很大,gpu的平行运算能力是有限的,所以花费的时间也会有个极限。批次很小的话,就会丧失平行运算的能力。需要很长时间跑完全部的数据集。所花费的时间就会更长。但是如果批次很大的话,training会比较差。这是optimization的问题,而小的batch_seize的训练结果就会比较好。
“Noisy” update is better for training每次更新参数的时候,批次大是沿着一个函数下来的,而小批次是更新参数有差异的,L1不走了,L2可能就会走。
“Noisy” update is better for generalization小的批次对testing也有帮助。原理就细讲。总得来说batch_size要选取一个合适大小,一般就是64,128,256.
Mome ...
GAN(生成式对抗网络)
GAN(生成式对抗网络)简介加入一个简单的分布样本,这个z就是我们在原始的神经网络上加入的简单的分布。怎么同时将z和x输入: 1.可以说x是一个向量,z也是一个向量,两者拼接成一个长向量当作输入。 2.在长度相同时,可以让他们相加,当作输入。z不是固定的,他也是在一个分布中去选出来的,这个分布必须足够简单。我们输入这个分布z那么我们经过我们的神经网络得到的输出y也是一个分布。
为什么输入需要是一个分布呢?当我们让机器去看视频时,机器会预测接下会发生什么机器在此过程中科能会出先小人分裂这种画面,而这不是我们想要的,这是一个错误的结果,所以我们需要加入一个分布,让结果并不唯一,让机器知道让左向右是两种可能。而我们需要这种模型是因为我们要让机器需要一点创造力的时候。我们这就需要让机器的输出是有机率的,而不是单一的输出,这杨让他的输出是一个分布。我们给这个网络加上一个z,他的输出就变成一个分布。
Generator(生成器)生成模型其中最知名的就是generative adversarial network,他的缩写为GAN这个z是从一个分布中随机取样出来的,这个维度是自己自 ...
Go数组
go语言数组package mainimport "fmt"func main() { var i int a := [5]float32{1000, 2, 2, 2, 2} //var balance [5]float32 //for i = 0; i < 5; i++ { // balance[i] = 5 // fmt.Println(balance[i]) //} mix(&a) //print(balance[4]) for i = 0; i < 5; i++ { fmt.Println(a[i]) }}func mix(arr *[5]float32) int { var k float32 = 5 arr[4] = k return 0}
——————–分割线——————–改为
mix(a) mix(arr [5]float32)
对于go语言来说传入数组不能像c语言一样直接修改,需要传入他的指针,才能对他的值进行修改。 ...
自动更新学习率
自动更新参数鞍点不一定是训练过程中最大的阻碍,当loss不再下降,梯度不一定很小。这就是error surface卡在了两个山谷之间不断震荡。这时候loss不会再下降,这时候就是卡在了临界点。当你用gradient descend来做优化时,往往不是因为临界点。
不同的参数需要不同的学习率如果在某个地方很平坦,就希望学习率大一些,而在某个地方很崎岖,就希望学习率小一些。我们有Momentum,也就是说我们现在,不是完全顺著gradient的方向,现在不是完全顺著这一个时间点,算出来的gradient的方向,来update参数,而是把过去,所有算出来gradient的方向,做一个加总当作update的方向,这个是momentum接下来应该要update多大的步伐呢,我们要除掉,gradient的Root Mean Square那讲到这边可能有同学会觉得很困惑,这一个momentum是考虑,过去所有的gradient,这个σ也是考虑过去所有的gradient,一个放在分子一个放在分母,都考虑过去所有的gradient,不就是正好抵销了吗,但是其实这个Momentum跟这个σ,它们在使用过去 ...
深度学习的基于pytorch实现
基本运算import torch #pytorch的速度比numpy更快x = torch.arange(12)x
tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
x.shape # 显示矩阵的阶数
torch.Size([12])
X = x.reshape(3,4) #转换矩阵的形状X
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
X.shape
torch.Size([3, 4])
x.numel() # 显示所有元素的个数
12
torch.ones((2,3,4)) #生成一个全为1的矩阵 2表示维度 3表示行数 4表示列数
tensor([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
...
直接插入排序
直接插入排序实现原理:我们从数组(or结构体)中的第二个数据开始,与上一个数据进行比较,如果大于的话就让a[0] = a[i];a[i] = a[i-1];之后我们就进入倒序打擂台模式,让j = i - 2之后如果a[0]<a[j]就j--且让a[j]向后移动一个单位,如果大于就将a[0]赋值给当前的a[j+1]。至此插入排序算法结束。
#include<stdio.h>int main(){ int a[100]; int n; int j; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=2;i<=n;i++){ if(a[i]<a[i-1]){ a[0] = a[i]; a[i] = a[i-1]; for( j=i-2;a[0]<a[j]; ...
折半插入排序
折半插入排序的思想就是折半查找和插入排序结合起来。首先将待排序元素放入a[0],之后运用插入排序找到该元素的插入位置,定义一个low ,high,取中间元素,之后比较a[0],和a[mid]的大小,如果比mid小则就让high = mid-1否则就让low = mid +1,直到循环结束high<low,让high+1,i-1的元素后移动,让a[high+1] = a[0]结束。
#include<stdio.h>int main(){ int low,high,mid; int a[100]; int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=2;i<=n;i++){ a[0] = a[i]; low = 1; high = i-1; while( ...
数据操作
python中f-string输出小数的方法f'{:.nf}'其中n是你想保留的小数
>>> a = 123.456# 只指定width 宽度右对齐>>> f"{a:10}"' 123.456'# 只指定0width 用0填充>>> f"{a:010}"'000123.456'# 使用width.precision 精度加宽度>>> f"{a:8.1f}"' 123.5'>>> f"{a:8.2f}"' 123.46'>>> f"{a:.2f}"'123.46'# 在width后面,直接加f,表示补足小数点后的位数至默认精度6>> ...
多边形面积
通过海伦公式实现c语言的多边形计算。
【问题描述】给出平面上一组顶点的坐标,计算出它们所围成的凸多边形的面积。【输入形式】从标准输入读取顶点坐标。格式为:第一行是点的个数N(3≤N≤15),后面紧接着N行,每行两个数字 (由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)。所有点的坐标互不相同,且按顺时针次序给出。输入数据确保该多边形是一个凸多边形。【输出形式】向标准输出打印一个浮点数,是该多边形的面积。该浮点数保留两位小数。【输入样例】43 01 01 2
【输出样例】5.00
#include <stdio.h>#include <math.h>int main(){ int x[100]; int y[100]; int i = 1; int n = 0; int sum1 = 0, sum2 = 0; scanf("%d", &n); while (i <= n) { scanf("%d", &x[ ...
选择排序
选择排序算法选择排序的主要操作是选择,主要思想是:每趟排序在当前待排序序列中选择出关键码最小的记录,添加到有序序列中。
void SelectSort(int r[,int n]){ int i,index,t; for(i=1;i<n;i++) { index=i; for (j=i+1; i <=n; j++) if (r[j]<r[index]) { index = j; } if (index!=i) { r[i] = t; r[i] = r[index]; r[index] = t; } }}
平均复杂度($n^2$)