对ANNs相关论文的阅读及PyTorch代码学习

2024-03-17 06:40

本文主要是介绍对ANNs相关论文的阅读及PyTorch代码学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

摘要

文献阅读

torchvision中数据集的使用

DataLoader的使用

神经网络的基本骨架-nn.Moudle的使用

总结


摘要

本周对文献展开了阅读和理解,针对ANNs的相关内容进行了学习,以及对于PyTorch的基本方法继续上周后的学习内容。

文献阅读

题目:基于人工神经网络算法的大气污染统计预测模型研究进展

作者:屈 坤 王雪松# 张远航

abstract

人工神经网络算法(ANNs)能够对影响大气污染物各变量间的非线性关系进行较好描述,因而在空气质量预 测、重污 染预警工作中得到了广泛的应用。随着算法结构的不断发展,基于 ANNs的大气污染统计预测模型在其预测精准性上得以显著提升。对近年来的相关研究成果进行归纳,从变量的选取与预处 理、算法结构的调整与优化等方面总结提升模型预测性能的主要方法,最终形成构建基于 ANNs的大气污染统计预测模型的方法体系。

论文目的

对近年来基于ANNs的 大 气污染统计预测模型的研究进展进行总结,梳理算法改进与优化的基本思路,为多层 次 预 报 预 警 系 统 的构建提供理论基础。

ANNs模型的组成

  • 输入层(算法输入变量)

  • 输出层(算法输出变量)

  • 隐藏层(Sigmoid函数作为激活函数)

采用多层感知机(MLP)结构,无论如何变化其基本结构组成仍然与MLP相似。

ANNs的重点内容:

对于输入变量进行标准化处理以防止数据数量级不同而加大计算量的问题出现,处理方法有如下几种:

  • 线性转化至[0,1];

  • 线性转化 至[a,b],通常选择区间为[0.1,0.9]或[0.2,0.8];

  • 统计学意义的数据标准化;

  • 通过除以最大值,进行简单标准化。

对输入变量的组合:

  • 降维处 理,以减少变量间共线性的影响、提高预测效率。

  • 进行分类,将分类结果作为一类新的变量加入模 型,使预测 更具针对 性。

输出变量的分解:

对基于ANNs的大气 污染统计预测模型进行训练时,可将所关注污染物 的浓度分解为不同频率的周期性序列与非周期性序 列的加和,并选取其中的周期性序列作为预测模型 的输出变量。常用方法包 括小波分解、经验模态分解(EMD)等。

隐藏层的结构设计:

隐藏层主要设计为单层结构,节点数过少,模型难以把握各数据间复 杂的作用关系;节点数过多,数据本身噪音的影响被 放大,模型易出现过拟合现象,同时增加计算消耗。在确定节点数时通常参考一些与输入层输出层节点数相关的经验公式。

N 为隐藏层节点数;nk为训练数据类别数;R、m 均为经验参数,分别取5~10、0~10;Nin、Nout分 别为输入层、输出层节点数;n为训练总数据量。

各种不同算法的大气污染统计预测模型性能比较

  1. 在NUNNARI中用于比较的算法共8类,包括了ANNs、FNN 算法、广义线性算法、相空间局地预测算法、线性时间序列模型等。对预测结果进行评估,总体上非线性模型的预测结果要好于线性模型。

  2. 在HAJEK中选取用于比对的算法包括前向传播神经网络算法(FFNNs)、时延神经网络算(TDNNs)、径向基神经网络算法(RBF)、 SNR等11类,发现结构更为复杂的RBF与SVR等算法效果要好于结构较为简单的 FFNNs。

  3. 在GONC中共考虑8类算法,包括 ANNS、SVM、 CART、RF、梯度增强机(GBM)、adaboost算法、装袋算法(Bagging)与线性聚合(L-ensemble)。预测结果表明各算法的预测性能间差异不大,CART所得预测结果总体上要好于ANNs与SVM,集成模型所得结果精确度要优于单个模型。

论文结论:

  1. ANNs的预测性能一般优于线性算法,但与其他非线性算法进行比对时并不能够得到明确的结论;

  2. 结构相对复杂的 ANNs预测能力一般强于 结构简单的MLP等;

  3. 集成模型的预测性能一般优于单个模型;

  4. 结合多类参数训练、输入变量预处理与输出变量分解等环节的先进算法可提升基于 ANNs的大气污染统计预测模型的整体性能。

针对于ANNs改进方向:

  1. 完善模型构建的基础内容。

  2. 加强模型构建的体系化。

  3. 进 一 步 提 升 模 型 的 预 测 能 力。

torchvision中数据集的使用

torchvision独立于pytorch,专门用来处理图像,通常用于计算机视觉领域。在pytorch中存在许多数据集给我们使用,通过到官方网站进行下载后,可以对利用这些数据集来完成我们的目的。

其中在torchvision最常用的3个包:

models:提供了很多常用的训练好的网络模型

transforms:提供了一些常用的图像转换处理操作,主要针对Tensor或PIL Image进行操作

datasets:提供了一些常用的图片数据集和加载自己的数据集的常用方法

import  torchvisiontrain_set torchvision.datasets.CIFAR10(root="./dataset",train=True,download=True)test_set = torchvision.datasets.CIFAR10(root="./dataset",train=False,download=True)print(test_set[0])print(test_set.classes)
img,target = test_set[0]
print(target)
print(img)
print(test_set.classes[target])
img.show()

打印后的结果

与transforms的联合使用

import  torchvision
from torch.utils.tensorboard import SummaryWriter
dataset_transform = torchvision.transforms.Compose([   torchvision.transforms.ToTensor()])
train_set=torchvision.datasets.CIFAR10(root="./dataset",train=True,download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset",train=False,download=True)
writer = SummaryWriter("p10")
for i in range (10):    img ,target = test_set[i]    writer.add_image("test_set", img, i)
writer.close()

DataLoader的使用

DataLoader就是数据加载器,结合了数据集和取样器,并且可以提供多个线程处理数据集。在训练模型时使用到此函数,用来把训练数据分成多个小组,此函数每次抛出一组数据。直至把所有的数据都抛出。就是做一个数据的初始化。

在pytorch中加载数据的顺序一般为先创建一个dataset对象,之后创建一个dataloader对象,最后对dataloader进行循环操作,讲data,lable拿到模型中去训练

import torchvision
from torch.utils.data import DataLoader
test_data = torchvision.datasets.CIFAR10("./daataset", train=False, download=True,transform=torchvision.transforms.ToTensor())#batch_size每次取4个数据集进行打包,
test_loader = DataLoader(dataset=test_data, batch_size=4, shuffle=True, num_workers=0, drop_last=False)
img, target = test_data[0]
print(img.shape)
print(target)
​
​
for data in test_loader:imgs, targets = dataprint(imgs.shape)print(targets)

将数据打包后的输出

在实践中,数据读取经常是训练的性能瓶颈,特别当模型较简单或者计算硬件性能较高时。Pytorch的Dataloader中一个很方便的功能是允许使用多进程来加速数据读取,我们可以通过num_workers来设置使用几个进程读取数据。

神经网络的基本骨架-nn.Moudle的使用

Module是Contains中最常用的模块。

使用nn.Moudle,首先是创建一个类继承nn.Moudle,之后继承nn.Moudle的初始化加上自己的初始化,最后重写forward方法。

import torch
from torch import nn
​
class Tudui(nn.Module):def __init__(self):super().__init__()
​
​def forward(self, input):output = input+1return output
​
tudui = Tudui()
x = torch.tensor(1)
output =  tudui(x)
print(output)

这就是一个简单的神经网络,搭建好骨架后对其进行输入数据

总结

这周是第一次对文献展开阅读,有着许多不熟练的地方,阅读完后对整个文章的理解程度还是不够的,因此需要在阅读过程中加强对其中内容的理解以及重复阅读。除此之外,对于基本方法还需要加强学习,现在的掌握程度是远远不够的。下周计划继续阅读文献以及展开对工程项目的相关技术ASP.net.MVC的学习。

这篇关于对ANNs相关论文的阅读及PyTorch代码学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818137

相关文章

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部