pytorch学习笔记二:用pytorch神经网络模型做气温预测、分类任务构建和分类网络构建、卷积神经网络原理介绍

文章目录

一、搭建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)次处理数据

①先计算隐层结果

python 复制代码
hidden = x.mm(weights) + biases

②按照惯例在结果之前加入激活函数relu

hidden = torch.relu(hidden)

③收敛把w2乘过来计算

predictins = hiddenmm(weights2) + biases2

④计算损失

(预测值减去真实值,再做平均方误差)

python 复制代码
loss = torch.mean((predictions - y) ** 2)
#放到数组,数据转为numpy格式
losses.append(loss.data.numpy())

⑤反向传播并更新参数(根据损失去更新最新的w1、B1,w2、B2)

python 复制代码
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)

⑥每次迭代记得清空计算出来的数值(记得计算梯度时都需要清空参数)

python 复制代码
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方法,自己会反向传播

六、DataSet模块介绍与应用方法

  • 模块介绍来把数据转为数据集

    ①tensorDataSet

    ②DataLoader

  • 获取数据接口

  • loss_batch不仅要计算损失值还要清零梯度和反向传播(这些就是batch Normalization 和 Drop out)

  • 获得模型的方法

  • 开始测试黄金二获得结果

七、卷积神经网络应用领域和卷积作用

1)卷积神经网络能做的事

2)卷积神经网络NN和传统神经网络CNN区别

3)整体架构

①输入层:输入的图片数据

②卷积层:卷积就是提取特征

③池化层:池化就是压缩特征

④全连接层(最终得出10个结果的概率排序,全连接就是两次w和b)

4)卷积做了一件什么事?

①把HxWxC分割成不同的区域

②对区域提取不同的特征

八、卷积的作用(略)

九、卷积特征值计算方法

1)图像颜色通道(RGB)

RGB三个通道分开去计算

2)实际提取特征流程

①这里H和W都是7,RGB代表3,所以图片的是7x7x3

②filter W0(3x3x3),这里3x3就是一个卷积核,前面的3x3表示多大区域选一个特征值,最后一个3和前面的输入量的最后一个3必须是一样的(这里红色的是特征图

③计算方法:
内积:相对应位置相乘并相加,如下图是R通道得出0,最终RGB加起来就是2

④还有偏置项bias:

W:(0+2+0)

Bias:b0为1

也就是说0+2+0+b0 = 2+1=3

3)利用不同卷积核得到不同特征图(28x28x6,6张图)

十、得到特征图表示

十一、步长与卷积核大小对结果影响

1)只做一次特征图就够了吗?

不断做卷积,得到堆叠的卷积层

2)卷积层涉及参数

①滑动窗口步长(

(1)步长大,得到图越小;

(2)小步长的特征比较丰富

(3)文本任务的步长不固定)

②卷积核尺寸(3x3和4x4,一般都是3x3)

③边缘填充

④卷积核个数

相关推荐
南宫生8 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__8 小时前
Web APIs学习 (操作DOM BOM)
学习
四口鲸鱼爱吃盐8 小时前
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
人工智能·pytorch·分类
冷眼看人间恩怨8 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
leaf_leaves_leaf9 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零19 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
四口鲸鱼爱吃盐9 小时前
Pytorch | 从零构建MobileNet对CIFAR10进行分类
人工智能·pytorch·分类
苏言の狗9 小时前
Pytorch中关于Tensor的操作
人工智能·pytorch·python·深度学习·机器学习
数据的世界0110 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐10 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习