动手学深度学习PyTorch版---笔记汇总

pytorch函数

PyTorch的Tensor,它可以是零维(又称为标量或一个数)、一维、二维及多维的数组。Tensor自称为神经网络界的Numpy,它与Numpy相似,二者可以共享内存,且之间的转换非常方便和高效。不过它们也有不同之处,最大的区别就是Numpy会把ndarray放在CPU中进行加速运算,而由Torch产生的Tensor会放在GPU中进行加速运算(假设当前环境有GPU)。

对Tensor的操作很多,从接口的角度来划分,可以分为两类:
1)torch.function,如torch.sum、torch.add等;
2)tensor.function,如tensor.view、tensor.add等。
这些操作对大部分Tensor都是等价的,如torch.add(x,y)与x.add(y)等价。在实际使用时,可以根据个人爱好选择。
如果从修改方式的角度来划分,可以分为以下两类:
1)不修改自身数据,如x.add(y),x的数据不变,返回一个新的Tensor。2)修改自身数据,如x.add_(y)(运行符带下划线后缀),运算结果存在x中,x被修改。

创建Tensor

创建Tensor的方法有很多,可以从列表或ndarray等类型进行构建,也可根据指定的形状构建。
在这里插入图片描述

注意torch.Tensor与torch.tensor的几点区别:
1)torch.Tensor是torch.empty和torch.tensor之间的一种混合,但是,当传入数据时,torch.Tensor使用全局默认dtype(FloatTensor),而torch.tensor是从数据中推断数据类型。
2)torch.tensor(1)返回一个固定值1,而torch.Tensor(1)返回一个大小为1的张量,它是随机初始化的值。

修改Tensor形状

在这里插入图片描述

torch.view与torch.reshpae的异同
1)reshape()可以由torch.reshape(),也可由torch.Tensor.reshape()调用。但view()只可由torch.Tensor.view()来调用。
2)对于一个将要被view的Tensor,新的size必须与原来的size与stride兼容。否则,在view之前必须调用contiguous()方法。
3)同样也是返回与input数据量相同,但形状不同的Tensor。若满足view的条件,则不会copy,若不满足,则会copy。
4)如果你只想重塑张量,请使用torch.reshape。如果你还关注内存使用情况并希望确保两个张量共享相同的数据,请使用torch.view。

索引操作

在这里插入图片描述

PyTorch与Numpy比较

在这里插入图片描述

深度学习

模型训练的过程其实就是在求【参数】的过程,我们先假定某类【模型】(比如决策树模型),然后用【训练集】来训练,学习到对应的最优的【参数】。但是问题在于,我们没有办法保证我们假设的那个【模型】是最优的,我们极有可能假设错误。有一个简单的解决方案就是我们假设一堆的模型,然后用【训练集】分别对这些模型来进行训练,学习到每一个【模型】中分别对应的参数——这是第一步,也就是【训练集】的任务。
那么我们已经学习到了一堆的模型了,哪一个模型是最好的呢?这其实就是要来考察不同结构的模型在这些data上的优劣程度了。通常来说,我们用【超参数】来控制模型的结构(例如正则项系数、神经网络中隐层的节点个数,k值等)。那这个时候,我们就可以找一些数据来训练和学习我们具体的超参数了。用什么样的数据呢?直接用【训练集】肯定是不行的,因为我们现在的每一个模型都是用【训练集】来学习出来的,他们在【训练集】上的效果已经很好了,继续用它们来训练超参数不会有太大的效果,所以说我们就选择了使用【验证集】来选择这些超参数。这是第二步,也就是【验证集】的任务,我们也通常称之为【调参】。
最后,当我们学习到了【参数】和【非参数】后,我们就确定了我们具体的模型结构,这个时候我们再用一些数据来测试这个模型在新的数据上的效果。因此,我们就不能够使用之前已经使用过的数据了,而要选择一个全新的数据集,这既是【测试集】。这个时候我们就要来看最后的结果怎么样,如果结果很好,那么说明一切顺利,但是如果结果很差,那问题出在哪里呢?其中可能的一个原因就是我们事先假定的那一类的【模型】(比如我们最先选择的决策树模型)并不是适合来分析这些数据,因此哪怕我们选择出了这一堆决策树模型中最好的一个(超参数的选择过程),它的效果依旧不怎么样。
这里还有两个遗留的问题:
(1)训练集、验证集和测试集的比例应该怎么去进行分配呢?
传统上是6:2:2的比例,但是不同的情况下你的选择应当不同。这方面的研究也有很多,如果你想要知道我们在设置比例的时候应当参考那些东西,可以去看Isabelle Guyon的这篇论文:A scaling law for the validation-set training-set size ratio 。他的个人主页(http://www.clopinet.com/isabelle/)里也展示了他对于这个问题的研究。
(2)训练集、验证集和测试集的数据是否可以有所重合?
有些时候我们的数据太少了,又不想使用数据增强,那么训练集、验证集和测试集的数据是否可以有所重合呢?这方面的研究就更多了,各种交叉方法,感兴趣的话可以去看Filzmoser这一篇文章Repeated double cross validation

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值