学习沐神课程 自用深度学习笔记01 数据操作&数据预处理

本文是学习沐神课程的深度学习笔记,主要介绍PyTorch中的数据操作,包括N维数组处理,如创建、访问元素、算术运算,以及数据预处理,如数据集创建、缺失值处理,并将数据转换为张量格式。
摘要由CSDN通过智能技术生成

数据操作

N维数组处理:

机器学习和神经网络的主要数据结构 RGB图片(3d) 批量RGB图片通道(4d) 视频批量(5d)

创建数组:

  1. 形状:3×4矩阵
  2. 每个元素的数据类型:例如32位浮点数
  3. 每个元素的值:如0

访问元素:

”:“的使用 a:b 表示(a,b) a:b:k k为步长

代码语句声明:

import torch
x = torch.arrange(12)  # 产生长度为12的一维矩阵
x.shape  # 输出x 的形状
x.numel()  # number of elements

要改变一个张量的形状而不改变元素数量和元素值可使用reshape函数

X = x.reshape(3,4)

赋值时可以用python列表赋值(类似于matlab的矩阵)

注意到tensor()只接收一个参数 如果要使用多维矩阵要嵌套列表

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])

算术运算:

所有的算术运算都是以元素为单位运行

x = torch.tensor([1.0, 2, 4, 8])  # 1.0为了改变整个张量的类型
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x**y
X = torch.arange(12, dtype=torch.float32).reshape((3, 4))  # 产生一个三行四列的张量 值从0到11 arange(a) 产生[0, a-1)的一维张量
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=1)  # dim为两者连接的维度 0为行 1为列

x.sum()对张量x的所有元素进行求和产生只有一个元素的张量(tensor)

广播机制 : 两矩阵形状不同时,会触发广播机制来执行按元素操作

reshape的语法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lnhzNXw3-1653483722885)(C:\Users\13097\AppData\Roaming\Typora\typora-user-images\image-20220523200918967.png)]

a = torch.arange(3).reshape((3, 1))   # 将元组(3, 1)传给newshape变量

**python内存问题: ** 运行一些操作会导致为新结果分配内存

before = id(Y)
Y = Y + X
id(Y) == before # result: false

虽然python不涉及内存管理问题,但同时生成较多大矩阵时仍然要避免一些浪费的情况

改写情况:原地操作

Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))

发现两者id相同,这里是因为我们改写之后的语句中Z[:] = X + Y是对值的改写 而不是对张量的声明

将pytorch张量转换为numpy张量:

A = X.numpy()
B = torch.tensor(A)  # 可以转换回来

数据预处理

  1. 需求:创建一个人工数据集,并存储在csv**(逗号分割值)**文件
import os

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')  # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')
  1. 从创建的csv文件中加载原始数据集

    # 如果没有安装pandas,只需取消对以下行的注释来安装pandas
    # !pip install pandas
    import pandas as pd
    
    data = pd.read_csv(data_file)  # 读取psv文件
    print(data)
    
  2. 处理缺失数据(插值 删除)

    inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]  # 将前两列放到inputs里 最后一列放入outputs
    inputs = inputs.fillna(inputs.mean())  # 将inputs的na值填入没有放na的均值 (数值域)
    print(inputs)
    

    插值只能对数值进行处理 对于非数值往往采取将n个元素划为一个n维数组

    inputs = pd.get_dummies(inputs, dummy_na=True)  # 将“NaN”视为一个类别 pandas自动将Alley类转化为数值
    print(inputs)
    

    运行结果:

         NumRooms  Alley_Pave  Alley_nan
    0       3.0           1          0
    1       2.0           0          1
    2       4.0           0          1
    3       3.0           0          1
    

​ [对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。] 由于“巷子类型”(“Alley”)列只接受两种类型的类别值“Pave”和“NaN”, pandas可以自动将此列转换为两列“Alley_Pave”和“Alley_nan”。 巷子类型为“Pave”的行会将“Alley_Pave”的值设置为1,“Alley_nan”的值设置为0。 缺少巷子类型的行会将“Alley_Pave”和“Alley_nan”分别设置为0和1。

  1. 转换为张量格式

    上述步骤结束后inputs与outputs均已全部转化为数值,可以将其转换为张量格式

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

    运行结果:

(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))
果:

(tensor([[3., 1., 0.],
[2., 0., 1.],
[4., 0., 1.],
[3., 0., 1.]], dtype=torch.float64),
tensor([127500, 106000, 178100, 140000]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值