pytorch 深度学习

 第二章  回归问题

 

 即使是最简单的线性回归,由于观测误差的存在,也不可能找到一个满足所有样本的函数。因此,我们退而求其次,寻找到一个满足大部分样本点的直线。那么如何衡量这个呢,我们可以求出所有样本点真实值和预测值的误差,满足总误差最小的就是最好的。

 

 

 连续值得预测问题被称为回归问题。离散值的预测问题被称为分类问题。

 这一部分主要介绍了未来增加模型的泛化能力,通常的做法是增加数据集的规模和多样性。这个很好理解,主要体现在量和质上面,量多了自然能学到更多的东西,质是指学习的东西具有针对性(在训练集上学到的都可以在测试集上很好的体现,也就是训练集和测试集的分布是很接近的)。

 

MINST手写数据集的介绍。首先这个数据集发布于1998年。每张图像的固定大小,都是灰度图像。

 

独热编码是为了解决数字编码带来的数字之间存在关系。 

定义one-hot编码

截止到这里,作者只介绍了一些简单的线性模型。由于线性模型对于复杂数据的拟合能力较差,因此可以选择加入非线性函数将模型转换为非线性模型。

 

 常见的非线性激活函数是ReLU函数。

 随着网络的加深,手工计算梯度变得十分麻烦。但是,深度学习的框架改变了这一问题。

手写数字识别实战。

首先通过Sequential搭建网络模型。

模型的训练过程。包括了优化器的设置、数据集的处理、输入数据、计算输出、计算损失函数、计算梯度(这里的梯度是自动计算的,loss.backward()  反向传播) 

 

 pytorch的基础是张量。不论是各种数据还是各种运算操作(OP)都是基于张量进行的。复杂神经网络的计算也都是各种张量相加、相乘的组合。

 

 

 对于数值类型的张量可以保存为不同字节。字节越长,占用的空间就越多,精度就越高。

 类型转换

 pytorch通过给每一个张量添加requires_grad属性来判断该张量需不需要求导。由于求导需要占用内存,且比较消耗资源,因此requires_grad属性默认为False。

创建张量

 

 这里讲了一种初始化方法。

维度变换 

视图是张量属于同一块存储空间但是展现的方式不一样。

 通常有两个函数  torch.reshape()  torch.view()  可以改变视图

通常情况下不改变存储,一般都是属于浅拷贝。比如说,简单的赋值操作。深拷贝是指另外开辟一块新的存储空间。

增加维度  使用的是torch.unsqueze()  删除维度使用的是 torch.squeeze() 

 交换维度 通常使用torch.permute()   如果是两个维度的交换则可以使用torch.transpose()

tensor.repeat()  复制数据

 

tensor.expand()可以扩展维度(广播机制)

 

 

 

 

 

 

 

 数据的复制和填充

数据的填充使用F.pad(tensor,[left,right])  其中left代表左边需要填充的个数  right代表右边需要填充的个数

 使用torch.max() 和torch.min() 实现数据限幅

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一壶浊酒..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值