【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理

简介: 【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理

同学你好!本文章于2021年末编写,已与实际存在较大的偏差!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,

Pytorch深度学习·理论篇(2023版)目录地址为:


CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录


专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!

https://v9999.blog.csdn.net/article/details/127587345


欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

103b746101d146cd93357daedb91d512.png


1.数组样例


fb12ffa13ba443efa97dbfb165a24840.png

5685383dffc04fc2af7c24164ffad403.png


56c141c69dcb4ccea7510d8c7fcc5483.png


d3dfee5bf7a649ee87a2a250baa7ff74.png


2.数据操作(代码实现与结果截图)


#首先导入torch,虽然被称为pytorch,但是我们应该导入torch而不是pytorch
import torch


#张量表示一个数值组成的数组,这个数字可能有多个维度
#这个行向量包含从0开始的前12个整数,默认创建为浮点数。张量中的每个值都称为张量的元素(element)。
#例如,张量x中有12个元素。除非额外指定,否则新的张量将存储在内存中,并采用基于CPU的计算。
x=torch.arange(12)
x

4aa9c1f182a04658af4d40d5c1db163c.png


x.shape() #shape不是函数哦

472ad90c467e4e37be26ff85a384c778.png


#通过张量的shape属性来访问张量的形状 (沿每个轴的长度)
x.shape


d9fcc7638b9e4d169403d9f26e52769e.png


x.numel() #x的总数

ac848a6b5a7b42028741b4c5140f98a9.png


#要改变一个张量的形状,而不改变元素的数量和元素值,我们可以调用reshape()
#注意,通过改变张量的形状,张量的大小不会改变。
x = x.reshape(3,4)
x
#不需要通过手动指定每个维度来改变形状。
#如果我们的目标形状是(高度,宽度),那么在知道宽度后,高度应当会隐式得出,我们不必自己做除法。在上面的例子中,为了获得一个3行的矩阵,我们手动指定了它有3行和4列。幸运的是,张量在给出其他部分后可以自动计算出一个维度。
#可以通过在希望张量自动推断的维度放置-1来调用此功能。
#即 x.reshape(-1,4) 或 x.reshape(3,-1)  等价于 x.reshape(3,4)。

efe4b70f132b4ad39bcea34de881e524.png


#使用全0的张量
torch.zeros((2,3,4))


f1a28b6e972745ffad5d350731fc2b06.png


#使用全1的张量
torch.ones((2,3,4))


4523b353b6084d508167cfcdb411b069.png


#使用包含数值的python列表给张量中的每个元素赋予确定值
torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]])

3cb4dede11c5424f812026da30a63c51.png


#标准算数运算符可以升级为按照元素运算
x = torch.tensor([1.0,2,4,8])
y = torch.tensor([2,2,2,2])
x + y,x - y,x * y,x / y, x**y # **运算符是求幂运算

9805c1692edc46fe9273c156229464e6.png


#创建一个形状为(3,4)的张量。其中的每个元素都从均值为0、标准差为1的标准高斯(正态)分布中随机采样。
torch.randn(3, 4)


tensor([[-0.9464,  0.7712, -0.0070,  1.0236],
        [-2.1246, -0.7854, -1.9674, -0.1727],
        [ 0.0397, -0.0477, -0.0160, -0.0113]])


#按元素的方式进行更多的计算
torch.exp(x)

35e4f27281fa4774811c7cc69f0906be.png


X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]])
torch.cat((X,Y),dim=0), torch.cat((X,Y),dim=1) #dim=0按列排列 #dim=1按行排列

315e9b2467fd44bd98f916e48e222510.png


#通过逻辑运算符构建二元张量
X == Y
#对于每个位置,如果X和Y在该位置相等,则新张量中相应项的值为1,这意味着逻辑语句X == Y在该位置处为真,否则该位置为0。


f8b28712bb184f1cae7bc1921fa051dd.png

#对于张量中的所有元素求和会产生只有一个元素的张量
X.sum()


c130bff502ab467b99ae43806c748d05.png


2.1.3广播机制


在某些情况下,即使形状不同,我们仍然可以通过调用广播机制(broadcasting mechanism)来执行按元素操作。这种机制的工作方式如下:首先,通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状。其次,对生成的数组执行按元素操作。


#形状不同 张量会进行广播机制
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a,b #广播机制

4f9925ac1ec4437fb5078e0f65001b2e.png


#由于a和b分别是 3×1 和 1×2 矩阵,如果我们让它们相加,它们的形状不匹配。我们将两个矩阵广播为一个更大的 3×2 矩阵,如下所示:矩阵a将复制列,矩阵b将复制行,然后再按元素相加。
a + b


859a2429755a473585bfeffdf126cdae.png

#[-1]选择最后一个元素,[1:3]选择第二个和第三个元素
X[-1],X[1:9] #1到9 但是最多有2行所以就显示了第1行和第2行

c90b6ebf25a7430bb265b5ed9e245101.png


#通过指定索引来将元素写入矩阵
X[1,2]=9
X

207085236a624de7bcc1a251ead71a9b.png

#为多个元素赋相同的值
X[0:2,:] =12 #将0至2行,全部赋值为12
X


2c33beb5e6944820a417cfb86598e3aa.png


#运行一些操作可能会为新结果分配内存
before = id(Y) 
Y = X + Y
id(Y) == before

064e640ab68d48c2b89d1da2d70ba29e.png


#执行原地操作 内存没有变化
Z = torch.zeros_like(Y)
print('id(Z)',id(Z))
Z[:] = X + Y
print('id(Z)',id(Z))


88dd238c7f154f87a97935c4a22343bf.png

#如果后续计算中没有重复使用x,我们可以使用x[:]=X+Y 或者 x+=y来减少操作的内存开销
before = id(X)
X += Y #+=的本质是调用append()
id(X) == before


93db5554109a457288715ea86598a518.png


A = X.numpy() #转化为numpy张量
B = torch.tensor(A)
type(A),type(B)


086c71314f7046bb98b33433b8874ad3.png

a = torch.tensor([3.5])#将大小为1的张量转化为python的标量
a,a.item(),float(a),int(a)

05aab490ce634c11a9e5fe4303a4c380.png


3.csv的读取(代码实现与结果截图)


我们将简要介绍使用pandas预处理原始数据并将原始数据转换为张量格式的步骤。我们将在后面的章节中介绍更多的数据预处理技术。


import os
#创建一个人工数据集并且存储在csv(逗号分割值)的文件中
os.makedirs(os.path.join('..','data'),exist_ok=True)
data_file = os.path.join('..','data','house_tiny.csv')
with open(data_file,'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 第1行的值
    f.write('2,NA,106000\n')  # 第2行的值
    f.write('4,NA,178100\n')  # 第3行的值
    f.write('NA,NA,140000\n')  # 第4行的值


6b3cee5d9f59490882b84b2990c81ce6.png

import pandas as pd
#从创建的csv文件中加载原始数据集
data = pd.read_csv(data_file)
print(data)


e2664d0f8c39494284a4b0b42df82390.png

data


441cf9021df849fe9e56170442d81312.png


#注意,“NaN”项代表缺失值。为了处理缺失的数据,典型的方法包括插值和删除,其中插值用替代值代替缺失值。而删除则忽略缺失值。在这里,我们将考虑插值。
#通过位置索引iloc,我们将data分成inputs和outputs,其中前者为data的前两列,而后者为data的最后一列。对于inputs中缺少的数值,我们用同一列的均值替换“NaN”项。
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2]
inputs = inputs.fillna(inputs.mean()) #在缺失数据处 添加平均值
print(inputs)

1ab4b0dab195472293ba664c4a202b80.png


#对于inputs中的类别值或离散值,我们将NaN视为一个类别
inputs = pd.get_dummies(inputs,dummy_na=True) #按类分
print(inputs)


b6960865a65840399e3db15af17bcdc2.png

import torch
X, y = torch.tensor(inputs.values),torch.tensor(outputs.values)
X, y

1d0a155fc22a4ffc9335d5bc4ff50abb.png


3.QA


1. b=a.reshape 并没有申请新的内存空间


c245b83392bd48db906ae4429e227cc5.png

2.学习一下numpy

3.快速区分维度:a.shape

4.视频笔记截图


77e533f3caa346fa8ff162853100f1af.png



5d1159a6811a400ab1f135ba9ef8bf73.png



57bbd5b7742849ed871333f7f1e07ba6.png



2290a28ab6ef41dc8fcf10d16d644e4b.png


9b20a2cad0a2466aa5e614d38d197bdb.png


92acc6cccb0a49f78757ef8d0a24a662.png


15c58c0c37b846f3b0427cf9bf731cbc.png


0fff3c007b4e47769f21433cf5c9e456.png


27ee307754a046afbf3b46d6f67e7219.png

b97027ccb6804dd29c74c6b63375b839.png

d28bcb5ee3a84df681b379ff45cc19dd.png


d1bfcbb5d7df432b9a5966f7faf701ad.png


 

0c66a29b12a24093b2fdc7ba6a42c8cb.png


6d99f7bce1c54d6fa822ed138f8a3b8e.png


b596d59dd9f946f7b5e4549112be1b8d.png


a7775b0d26fc433f877c6a069f92ce4e.png


483dff1d9ccf4f218a2877bf06701151.png

089e4369bda04c1cb9c11bf0f91b241a.png

3992d6e286bd43e5b9abf9b54004825d.png

4fa2bab445444c86a21cc37237aff4de.png

a7c3bf3840d544d8bc5df542ec159aac.png

c91ad90ef4fe4802a7a3ad1494c45248.png


04ee28929ccd44ba9b80523c65981b0c.png

目录
相关文章
|
3月前
|
Python
LBA-ECO CD-32 通量塔网络数据汇编,巴西亚马逊:1999-2006,V2
该数据集汇集了1999年至2006年间巴西亚马逊地区九座观测塔的碳和能量通量、气象、辐射等多类数据,涵盖小时至月度时间步长。作为第二版汇编,数据经过协调与质量控制,扩展了第一版内容,并新增生态系统呼吸等相关计算数据,支持综合研究与模型合成。数据以36个制表符分隔文本文件形式提供,配套PDF说明文件,适用于生态与气候研究。引用来源为Restrepo-Coupe等人(2021)。
40 1
|
2月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
72 4
|
3月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
基于Pytorch 在昇腾上实现GCN图神经网络
本文详细讲解了如何在昇腾平台上使用PyTorch实现图神经网络(GCN)对Cora数据集进行分类训练。内容涵盖GCN背景、模型特点、网络架构剖析及实战分析。GCN通过聚合邻居节点信息实现“卷积”操作,适用于非欧氏结构数据。文章以两层GCN模型为例,结合Cora数据集(2708篇科学出版物,1433个特征,7种类别),展示了从数据加载到模型训练的完整流程。实验在NPU上运行,设置200个epoch,最终测试准确率达0.8040,内存占用约167M。
基于Pytorch 在昇腾上实现GCN图神经网络
|
4月前
|
机器学习/深度学习 算法 PyTorch
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
深度学习近年来在多个领域取得了显著进展,但其核心组件——人工神经元和反向传播算法自提出以来鲜有根本性突破。穿孔反向传播(Perforated Backpropagation)技术通过引入“树突”机制,模仿生物神经元的计算能力,实现了对传统神经元的增强。该技术利用基于协方差的损失函数训练树突节点,使其能够识别神经元分类中的异常模式,从而提升整体网络性能。实验表明,该方法不仅可提高模型精度(如BERT模型准确率提升3%-17%),还能实现高效模型压缩(参数减少44%而无性能损失)。这一革新为深度学习的基础构建模块带来了新的可能性,尤其适用于边缘设备和大规模模型优化场景。
135 16
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
|
4月前
|
机器学习/深度学习 搜索推荐 PyTorch
基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
本文详细讲解了如何在昇腾平台上使用PyTorch训练推荐系统中的经典模型DIN(Deep Interest Network)。主要内容包括:DIN网络的创新点与架构剖析、Activation Unit和Attention模块的实现、Amazon-book数据集的介绍与预处理、模型训练过程定义及性能评估。通过实战演示,利用Amazon-book数据集训练DIN模型,最终评估其点击率预测性能。文中还提供了代码示例,帮助读者更好地理解每个步骤的实现细节。
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
基于Pytorch Gemotric在昇腾上实现GAT图神经网络
本实验基于昇腾平台,使用PyTorch实现图神经网络GAT(Graph Attention Networks)在Pubmed数据集上的分类任务。内容涵盖GAT网络的创新点分析、图注意力机制原理、多头注意力机制详解以及模型代码实战。实验通过两层GAT网络对Pubmed数据集进行训练,验证模型性能,并展示NPU上的内存使用情况。最终,模型在测试集上达到约36.60%的准确率。
|
4月前
|
算法 PyTorch 算法框架/工具
PyTorch 实现FCN网络用于图像语义分割
本文详细讲解了在昇腾平台上使用PyTorch实现FCN(Fully Convolutional Networks)网络在VOC2012数据集上的训练过程。内容涵盖FCN的创新点分析、网络架构解析、代码实现以及端到端训练流程。重点包括全卷积结构替换全连接层、多尺度特征融合、跳跃连接和反卷积操作等技术细节。通过定义VOCSegDataset类处理数据集,构建FCN8s模型并完成训练与测试。实验结果展示了模型在图像分割任务中的应用效果,同时提供了内存使用优化的参考。
|
4月前
|
机器学习/深度学习 算法 PyTorch
基于Pytorch Gemotric在昇腾上实现GraphSage图神经网络
本实验基于PyTorch Geometric,在昇腾平台上实现GraphSAGE图神经网络,使用CiteSeer数据集进行分类训练。内容涵盖GraphSAGE的创新点、算法原理、网络架构及实战分析。GraphSAGE通过采样和聚合节点邻居特征,支持归纳式学习,适用于未见节点的表征生成。实验包括模型搭建、训练与验证,并在NPU上运行,最终测试准确率达0.665。
|
5月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
165 22

热门文章

最新文章

推荐镜像

更多