文章目录
- 一、搭建pytorch神经网络进行气温预测
- 1)基础搭建
- 2)实际操作标识特征和标签
- 3)构建成标准化的预处理数据(做标准化收敛速度更快)
- 二、按照建模顺序构建完成网络架构
- 1)np.array格式的标签(y)和特征(x)转为tensor格式数据
- 2)显示特征14个转为128个隐式特征weight和偏执biases128个去微调,并设置学习率
- 3)for循环batchsize(1000)次处理数据
- 三、简化代码来训练网络模型
- 1)参数解释
- 2)实际训练简化代码
- 3)预测训练结果并画图
- 四、分类任务概述
- 1)下载并解压Mnist数据集
- 2)分类任务的原理
- 3)nn.functional模块和nn.Module模块使用介绍
- 五、构建分类网络
- 1)把x和y都转成tensor格式
- 2)定义函数并使用
- 3)创建一个model来简化模型
- 六、DataSet模块介绍与应用方法
- 七、卷积审计网络应用领域
- 八、卷积的作用
- 九、卷积特征值计算方法
- 十、得到特征图表示
- 十一、步长与卷积核大小对结果影响
一、搭建pytorch神经网络进行气温预测
1)基础搭建
- 加载模块代码
- 读取气温数据
- 参数解释
- 查看数据维度
print('数据维度', features.shape)
-
时间处理字符串
-
准备用数据画曲线图
- 对周几这种数据做独热编码(把数据转成做数值的形式)
2)实际操作标识特征和标签
- 备注
①标签labels就是y=kx+b中的y,只要标识出来
②把标签在x中去掉,也就是在特征中去掉标签(特征就是x)
③转换成合适格式,也就是把数据转成np.array的格式
④features.shape里面显示了数据有384行,特征有14个
3)构建成标准化的预处理数据(做标准化收敛速度更快)
二、按照建模顺序构建完成网络架构
1)np.array格式的标签(y)和特征(x)转为tensor格式数据
2)显示特征14个转为128个隐式特征weight和偏执biases128个去微调,并设置学习率
- 注意
这是回归任务,所以最终要得到一个实际的值,所以weight2是【128,1】,则偏置参数biases2也只是只有1个
3)for循环batchsize(1000)次处理数据
①先计算隐层结果
hidden = x.mm(weights) + biases
②按照惯例在结果之前加入激活函数relu
hidden = torch.relu(hidden)
③收敛把w2乘过来计算
predictins = hiddenmm(weights2) + biases2
④计算损失
(预测值减去真实值,再做平均方误差)
loss = torch.mean((predictions - y) ** 2)
#放到数组,数据转为numpy格式
losses.append(loss.data.numpy())
⑤反向传播并更新参数(根据损失去更新最新的w1、B1,w2、B2)
loss.backward()# 更新参数
weights.data.add_(- learning_rate * weights.grad.data)
biases.data.add_(- learning_rate * biases.grad.data)
weights2.data.add_(- learning_rate * weights2.grad.data)
biases2.data.add_(- learning_rate * biases2.grad.data)
⑥每次迭代记得清空计算出来的数值(记得计算梯度时都需要清空参数
)
weights.grad.data.zero_()
biases.grad.data.zero_()
weights2.grad.data.zero_()
biases2.grad.data.zero_()
三、简化代码来训练网络模型
1)参数解释
input_size:总共样本数量
hidden_size:隐藏特征个数
output_size:输出结果个数
batch_size:16(一次训练的数据数量,之前是全部读进去)
2)实际训练简化代码
①构建网络模型(这里用的Adam动态调整学习率)
②训练网络
3)预测训练结果并画图
- 备注
①其实就是转为numpy格式画图
②x轴为时间
③这里reshape(-1)表示一列的意思
④真实值用蓝色表示,预测值用红色表示
- 结果展示
四、分类任务概述
-
与之前的回归模型的区别
①得到的结果是不同的
②使用的损失函数也是不同的 -
学习目的:Mnist分类任务
①网络基本构建与训练方法,常用函数解析
②torch.nn.functional模块
③nn.Module模块
1)下载并解压Mnist数据集
-
下载
-
解压
-
看数据集大概什么样子
可以看到787是每个样本的像素点个数,可以看成是787个特征(下面是打印5这个数字)
2)分类任务的原理
-
原理
说白了就是判断这个数字属于1到10哪个类别的概率,这里可以看到9属于9的概率是最高的87%
-
流程
3)nn.functional模块和nn.Module模块使用介绍
①有可学习的参数用Module:卷积层、
②其他情况用functional:激活函数、损失函数(分类任务一般用交叉相乘作为损失函数:cross_entropy)
五、构建分类网络
1)把x和y都转成tensor格式
2)定义函数并使用
- 定义函数
- 定义参数
bs:也就是batch_size - 实际训练流程,并打印结果
这里model(xb)得出预测值,yb是真实值
3)创建一个model来简化模型
- 备注
①必须继承nn.Module并在构造函数调用nn.Module的构造函数
②无需写反向传播函数,nn.Module能够利用autograd自动实现反向传播
③nn.Module中的可学习参数可以通过named_parameters()或parameters()返回迭代器
④这里的forward方法,自己会反向传播