自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 问答 (6)
  • 收藏
  • 关注

原创 为什么需要设置验证集(validation)

以前学习机器学习,只有train和test,为什么现在添加了validation?1.若训练时用train来判断现在模型的训练情况以决定训练结束的时间,其模型可能只对train的训练集效果好,无泛化能力。2.若训练时用test来判断现在模型的训练情况以决定训练结束的时间,其模型可能已经对test效果好了,再用test评估模型不公平。...

2021-04-13 09:19:24 977

原创 关于端到端学习和非端到端学习的简单理解

在看R-CNN 和Faster R-CNN,学到了两个词,端到端学习和非端到端学习。1.端到端学习:输入X,直接预测最终结果Y2.非端到端:需要多个组件才能预测最终结果 (example:R-CNN 需要单独的训练三个模块,包括 ①CNN特征向量的提取 ②SVM分类 ③边框修正)其意义:若数据集不够训练,可以考虑非端到端像通过儿童手骨X光预测年龄,没有这么多数据集,即手骨与年龄的标注数据集训练,但可以让其识别骨头,然后拿骨...

2021-04-12 14:52:31 1926

原创 关于Pytorch加载预训练模型

1.关于Pytorch加载预训练模型自定义网络类的字典是OrderedDict字典,为顺序的,即是按照代码中声明层的先后顺序输出的。 def __init__(self, in_channel, out_channel, stride=1, downsample=None, **kwargs): super(BasicBlock, self).__init__() self.conv1 = nn.Conv2d(in_channels=in_channel,

2021-04-11 14:55:57 950

原创 关于Batch和权值更新的时间

一直以为:输入一张数据,就前向传播,然后反向传播更新权重。(X)正确理解:梯度下降:损失函数定义在所有样本上。每次都是在所有样本上作梯度下降。随机梯度下降(SGD): 每次随机选择一个样本,损失函数定义在一个样本上。每次都是在一个样本上作梯度下降。mini batch:每次随机选择batch_size 个样本,损失函数定义在batch_size个样本上。每次都是在batch_size个样本上作梯度下降。看公式可知,不是一个样本就更新一次权值,Batch需要全部算.

2021-04-10 16:01:53 681

原创 Pytorch的Sequential容器

据上图可知:Suquential传入的是一个Module的列表,也就是继承nn.Module的类。不能光想着下面这几个Example的写法,一个Module类也是一块网络(一个类不一定要定义完整的网络哦,一块也行,一行也行),一行nn.Conv2d也是一块网络 layers = [] layers.append(block(self.in_channel, channel, ..

2021-04-10 09:05:41 404

原创 train模式(net.train())和eval模式(net.eval())

神经网络模块存在两种模式,train模式(net.train())和eval模式(net.eval())。一般的神经网络中,这两种模式是一样的,只有当模型中存在dropout和batchnorm的时候才有区别。一旦我们用测试集进行结果测试的时候,一定要使用net.eval()把dropout关掉,因为这里我们的目的是测试训练好的网络,而不是在训练网络,没有必要再dropout和再计算BN的方差和均值(BN使用训练的历史值)。...

2021-04-09 16:44:09 3539

原创 x = x.view(x.size(0), -1) 的理解

Pytorch的tensor的view方法相当于numpy中resize()的功能,但是用法可能不太一样。把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor。比如说是不管你原先的数据是[[[1,2,3],[4,5,6]]]还是[1,2,3,4,5,6],因为它们排成一维向量都是6个元素,所以只要view后面的参数一致,得到的结果都是一样X.view(x.size(0),-1) ,-1为推断是几(即一维.

2021-04-07 09:32:38 1077

原创 关于pytorch的save函数

# torch.save(Modul.state_dict(),store_dir)#保存训练模型 torch.save(Modul,store_dir)#上面的只保存了参数 测试时会'collections.OrderedDict' object has no attribute 'forward'RT

2021-04-06 18:38:35 1218

原创 Python函数中的冒号和箭头

def sum(a:int,b:int=100) ->int: a = 200 return a+bif __name__ == '__main__': c = sum(a=0) print(c)其实函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型。函数后面跟着的箭头是函数返回值的类型建议符,用来说明该函数返回的值是什么类型。值得注意的是,类型建议符并非强制规定和检查,也就是说即使传入的实际参数与建议参数不符,也不会报错...

2021-04-05 18:59:45 356

原创 关于神经网络中的Hyperparameter

Hyperparameter(超参数)在机器学习的中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。如果这些超参数没有设置合适的值,模型的性能可能就会很差。感觉超参数的设置就是在试错调整超参数的时候,一般用超参数专用的确认数据,成为Validation data(验证数据)。个人感觉:traindata 是用来得到需要训练得到的数据,然后validation data 来测试人为设.

2021-04-05 09:18:49 547

原创 神经网络中Affine layer

仿射层Affine layer是神经网络中的全连接层,其中仿射的可以看做是不同层神经元之间的相互连接,在许多方面可以被看作是神经网络的「标准」层。仿射层的一般形式如下y = f( wx + b)x 是层输入,w 是参数,b 是偏差,f 是非线性激活函数。全连接一般通常被用于卷积神经网络输出的最终层...

2021-04-04 09:58:44 706

原创 Python类中的变量

一、类变量1.1可变变量作为类变量:对于列表、字典、自定义类这些可变变量,如果将其作为类变量,则是传引用。即所有对象的类变量公用一个内存地址。1.2不可变变量作为类变量:对于INT,STRING这种不可变变量,如果将其作为类变量,则是传值。即所有对象的类变量有各自的内存地址。 对于1.2:第一次对象的变量没改,改类的变量会影响对象变量,只要改一次对象变量,就不会影响了 A.ui = 10 print(object1.ui) object1.ui = 5 ...

2021-04-03 15:43:40 703

原创 Python的Input不进行转义

print('\\\n')a = input()print(a)output:\ #对字符串\\\n的输出\\\n #input接收的输入\\\n综上所述:input会对输入原样输出,不进行转义

2021-04-03 11:03:39 463

原创 Numpy(第四章)

Numpy花式索引布尔类型or位置索引a = np.array(range(0,11))print(a)print(a>5)print(a[ [False,False,False,False,False,False,True,True,True,True,True]])print(a[(a>5)&(a%2==0)])print(a[[1,2,3]])注意区别a[1,2,3]与a[[1,2,3]]: 第一个为取a[1][2][3] 第二个为取a第一行的1,2...

2021-04-03 08:25:30 47

原创 Im2col+GEMM快速卷积

核心思想:将卷积操作(一个个数据窗口相乘求和)变为矩阵乘法,进行快速计算如何将普通卷积的操作变成有意义的矩阵相乘???关键点:普通卷积操作:即①对应位置相乘,之后累加。但如果把w矩阵以及x被w圈起来的部分②拉直(展平),就变成了两个向量。③然后向量对应位置相乘之后累加,此形式就变成了两个向量点乘,如果把x被圈的部分全部拉直变成向量,④向量组合乘矩阵。把每一个卷积核也都拉直,凑起来变成矩阵。利用矩阵来进行多个向量的点乘,⑤变成了矩阵乘法。算出来reshape一下就变回去了。①②就是Im2.

2021-04-02 09:18:50 592

原创 Numpy(第三章)

对象的索引与切片1.Array对象的索引print(e[0,0,1,0])#一个数的索引就是括号从外到内 此处相当于列表的e[0][0][1][0],其索引的意义为从括号由外到内索引2.Array对象的切片c = a[0:4]#a[:4] a[4:] 这样也是改c1 = a[5:8].copy() #这样才不会改a的值d = [i for i in range(10)]b = [i for i in range(4)]w = d[0:4] #这种切片就copy了个...

2021-04-01 17:53:49 49

原创 卷积神经网络与人工神经网络

1.卷积层 :每个卷积核产生一张提取后的单通道图像(3通道进行卷积后也是1张了,因为累加了)2.pooling层:对每张矩阵是单连接的,即一张矩阵对应一个pooling。3.全连接层:相当与把3张图像,即[C,W,H]进行展平为C*W*H个神经元,全连接到全连接层卷积层不要和全连接混了!看图以为卷积不也是全连接吗??? ANN为全排列方式展示出来,即1维度,而CNN每层的神经元都是3维度展示出来,但其内部的实现原理都是由神经元模型组成的神经网络左边是实际的情况,右边是普...

2021-04-01 17:04:21 874 1

原创 Numpy(第二章)

Array对象的基本操作1.输出对象的sizeprint(e.size)#size输出的是单位元素的个数,即不可再分的元素2.输出对象每维的元素个数print(e.shape)#shape输出的是每个维度的个数注意区分size和shape:size是不可分元素的个数,shape为每维包裹的东西的个数,即shape里面的数相乘即为size3.输出数组的维度print(e.ndim)#输出维度 关于2,3的n维度:每个维度即匹配的中括号包裹的就算1维,里面包的...

2021-04-01 09:06:21 47

原创 Numpy(第一章)

一:Numpy数组 与 Python列表的区别 1.数组的大小不可以更改(python列表可用用append等操作) 2.数组对象内的元素类型必须相同(python列表里可以是大杂烩)二:初始化 1.利用已有列表进行初始化(试过元组好像也可以,字典可能不行)a = [random.uniform(100.0,200.0) for i in range(50)]a = np.array(a)2.利用range初始化yd = np.array(range(0,50,3)...

2021-04-01 07:43:25 123 1

原创 输出层的几种激活函数

1.恒等函数:按照原样进行输出,对输出的信息不加以任何的改动 2.softmax激活函数 :适用于多分类问题,输出属于各个分类的概率 (因为输出层softmax全部相加=1,正是因为这个原因,把softmax解释为概率) 3.sigmoid激活函数:适用于二分类,单个输出为0到1间的概率,所以他看的并不是输出的整体。关于2,3的理解:输出(0, 1)代表“是”,输出(1, 0)代表“否”Softmax可能输出(0.3, 0.7),代表算法认为“是”的概率是0.7,“否”...

2021-03-30 17:14:25 4822

原创 python中参数带*

python中参数带* 函数传参和函数定义时的*,含义不同。1.调用函数时使用* 与 ** def test(a,b,c): return a+b+cq = [1,2,3]p = {'a':1,'b':2,'c':3}print(test(**p))print(test(*q))*为传入序列,列表元组都行,每个位置对应a,b,c 不能超出也不能少于 相当于test(1,2,3)**为传入字典,a ,b ,c一定要对应参数的名字一样 相当于 test(a=1,...

2021-03-30 15:30:25 85

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除