![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
机器学习
vectorindex
这个作者很懒,什么都没留下…
展开
-
为什么需要设置验证集(validation)
以前学习机器学习,只有train和test,为什么现在添加了validation?1.若训练时用train来判断现在模型的训练情况以决定训练结束的时间,其模型可能只对train的训练集效果好,无泛化能力。2.若训练时用test来判断现在模型的训练情况以决定训练结束的时间,其模型可能已经对test效果好了,再用test评估模型不公平。...原创 2021-04-13 09:19:24 · 1006 阅读 · 0 评论 -
关于端到端学习和非端到端学习的简单理解
在看R-CNN 和Faster R-CNN,学到了两个词,端到端学习和非端到端学习。1.端到端学习:输入X,直接预测最终结果Y2.非端到端:需要多个组件才能预测最终结果 (example:R-CNN 需要单独的训练三个模块,包括 ①CNN特征向量的提取 ②SVM分类 ③边框修正)其意义:若数据集不够训练,可以考虑非端到端像通过儿童手骨X光预测年龄,没有这么多数据集,即手骨与年龄的标注数据集训练,但可以让其识别骨头,然后拿骨...原创 2021-04-12 14:52:31 · 2136 阅读 · 0 评论 -
关于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 · 961 阅读 · 0 评论 -
关于Batch和权值更新的时间
一直以为:输入一张数据,就前向传播,然后反向传播更新权重。(X)正确理解:梯度下降:损失函数定义在所有样本上。每次都是在所有样本上作梯度下降。随机梯度下降(SGD): 每次随机选择一个样本,损失函数定义在一个样本上。每次都是在一个样本上作梯度下降。mini batch:每次随机选择batch_size 个样本,损失函数定义在batch_size个样本上。每次都是在batch_size个样本上作梯度下降。看公式可知,不是一个样本就更新一次权值,Batch需要全部算.原创 2021-04-10 16:01:53 · 754 阅读 · 0 评论 -
Pytorch的Sequential容器
据上图可知:Suquential传入的是一个Module的列表,也就是继承nn.Module的类。不能光想着下面这几个Example的写法,一个Module类也是一块网络(一个类不一定要定义完整的网络哦,一块也行,一行也行),一行nn.Conv2d也是一块网络 layers = [] layers.append(block(self.in_channel, channel, ..原创 2021-04-10 09:05:41 · 431 阅读 · 0 评论 -
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 · 3595 阅读 · 0 评论 -
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 · 1113 阅读 · 0 评论 -
关于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 · 1252 阅读 · 0 评论 -
关于神经网络中的Hyperparameter
Hyperparameter(超参数)在机器学习的中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。如果这些超参数没有设置合适的值,模型的性能可能就会很差。感觉超参数的设置就是在试错调整超参数的时候,一般用超参数专用的确认数据,成为Validation data(验证数据)。个人感觉:traindata 是用来得到需要训练得到的数据,然后validation data 来测试人为设.原创 2021-04-05 09:18:49 · 567 阅读 · 0 评论 -
神经网络中Affine layer
仿射层Affine layer是神经网络中的全连接层,其中仿射的可以看做是不同层神经元之间的相互连接,在许多方面可以被看作是神经网络的「标准」层。仿射层的一般形式如下y = f( wx + b)x 是层输入,w 是参数,b 是偏差,f 是非线性激活函数。全连接一般通常被用于卷积神经网络输出的最终层...原创 2021-04-04 09:58:44 · 732 阅读 · 0 评论 -
Im2col+GEMM快速卷积
核心思想:将卷积操作(一个个数据窗口相乘求和)变为矩阵乘法,进行快速计算如何将普通卷积的操作变成有意义的矩阵相乘???关键点:普通卷积操作:即①对应位置相乘,之后累加。但如果把w矩阵以及x被w圈起来的部分②拉直(展平),就变成了两个向量。③然后向量对应位置相乘之后累加,此形式就变成了两个向量点乘,如果把x被圈的部分全部拉直变成向量,④向量组合乘矩阵。把每一个卷积核也都拉直,凑起来变成矩阵。利用矩阵来进行多个向量的点乘,⑤变成了矩阵乘法。算出来reshape一下就变回去了。①②就是Im2.原创 2021-04-02 09:18:50 · 654 阅读 · 0 评论 -
卷积神经网络与人工神经网络
1.卷积层 :每个卷积核产生一张提取后的单通道图像(3通道进行卷积后也是1张了,因为累加了)2.pooling层:对每张矩阵是单连接的,即一张矩阵对应一个pooling。3.全连接层:相当与把3张图像,即[C,W,H]进行展平为C*W*H个神经元,全连接到全连接层卷积层不要和全连接混了!看图以为卷积不也是全连接吗??? ANN为全排列方式展示出来,即1维度,而CNN每层的神经元都是3维度展示出来,但其内部的实现原理都是由神经元模型组成的神经网络左边是实际的情况,右边是普...原创 2021-04-01 17:04:21 · 909 阅读 · 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 · 5041 阅读 · 0 评论