【<动手学深度学习>笔记】数据操作+预处理


tips:学习李沐老师的《动手学深度学习v2》课程中整理的自用笔记


一、数据操作

1.1 维度样例

名称维度应用例子
0d 标量0类别1.0
1d 向量1特征向量[1.0 , 2.0]
2d 矩阵2样本;特征矩阵[[1.0 , 2.0 ] [5.0 , 6.0]]
3d3RGB图片,宽x高x通道
4d4一个RGB图片的批量,批量x宽x高x通道
5d5视频批量,批量x时间x宽x高x通道

1.2 创建数组——torch.arange

  1. 参数说明:
    1)一个参数,end:默认start=0,step=1;
    2)两个参数,start,end:默认step=1;
    在这里插入图片描述
  2. 实例:
import torch

x1 = torch.arange(5)
x2 = torch.arange(1, 4)
x3 = torch.arange(1, 3, 0.5)
print("x1:", x1)
print("x1:", x2)
print("x1:", x3)

在这里插入图片描述

1.3 访问属性——shape、numel、reshape

  1. x.shape:结果是向量
  2. x.numel():结果是标量
  3. x.reshape(h,w):仅改变张量的形状,不改变值
  4. 实例:
import torch

x = torch.arange(12)
xShape = x.shape
xNumel = x.numel()
xReshape = x.reshape(3, 4)

print(x)
print(xShape)
print(xNumel)
print(xReshape)

在这里插入图片描述

1.4 全0、全1数组——torch.zeros、torch.ones

  1. 实例:
torch.zeros((2,3,4))

在这里插入图片描述

在这里插入图片描述

1.5 创建具体数值的张量——torch.tensor

  1. 通过嵌套列表构建
  2. 实例:
import torch

x = torch.tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                  [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]])
print(x)

在这里插入图片描述

1.6 按行/列连结张量——torch.cat

  1. 函数参数:
torch.cat((tensorList),dim=)
参数名用法
tensorList连接张量
dimdim=0,按行连接;dim=1,按列连接
  1. 实例:
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
y = torch.tensor([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]])
withRow = torch.cat((x, y), dim=0)
withColumn = torch.cat((x, y), dim=1)

print("x:", x)
print("y:", y)
print("row:", withRow)
print("col:", withColumn)

在这里插入图片描述
在这里插入图片描述

1.7 广播机制Broadcast

  1. 出现情况:两个张量的维度向右对齐,在维度大小上满足:
    1)维度大小相等
    2)维度不等,且有一个是1或不存在
  2. 应用:满足以上条件的张量做运算时,理论上不可计算,实际上默认通过广播机制自动扩张成相同的size进行运算。实际应用中,时常会因为默认的广播机制导致运算不符合预期,但不报错。注意debug。
  3. 实例分析:AB从右向左看,最末尾的维度值是4,满足1);次末尾维度虽然维度大小不等,但B维度是1,满足2);最高位维度虽然不等,但B的维度不存在,满足2);所以A和B运算触发广播机制,最终扩张为shape=(3,2,4)。
A.shape=(3,2,4)
B.shape=(1,4)
  1. 实例代码:
import torch

x = torch.tensor([[1, 2, 3]])
y = torch.tensor([[1], [2], [3]])
z = x+y

print("x:", x)
print("y:", y)
print("z:", z)

在这里插入图片描述

1.8 切片读取

  1. 读取某些特定的行/列
    1)只有一个参数:某一行/列;正数从0计数,负数从-1计数
    2)两个参数(a:b):某一范围,左闭右开
    3)只有冒号 :代表行/列全部读取,可以默认不写,例如x[0:2,:]与x[0:2]一致。
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(x[1:3])
print(x[1:3, :])

在这里插入图片描述

  1. 行实例:
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(x[0])
print(x[-1])
print(x[1:3])

在这里插入图片描述

1.9 切片写入

  1. 与读取同理,应用冒号做赋值
  2. 实例:给第三四行的前两列赋值为10
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [7, 8, 9]])
print(x)
x[2:4, 0:2] = 10
print(x)

在这里插入图片描述

1.10 numpy张量

  1. numpy与tensor转换
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [7, 8, 9]])
y = x.numpy()
z = torch.tensor(y)
print(type(y))
print(type(z))

在这里插入图片描述

二、数据预处理

python相关的os操作见:python杂项记录——tqdm/注释/self参数/OS/部分语法/split()/cv2库

2.1 scv文件读写

  1. csv文件:使用逗号分隔值,存储数据集的文件。一般第一行是列名,之后每一行为一条数据。

  2. 生成csv文件例子:

import os
import pandas as pd

file_path = os.path.join('test01', 'data')  # 父目录
file_name ='test01_data.csv'
os.makedirs(file_path, exist_ok=True)  # 目录不存在则新建
data_file = os.path.join(file_path, file_name)  # scv目录
with open(data_file, 'w') as f:
    f.write('Id,Name,Price\n')  # 列名称
    f.write('01,Cake,100\n')  # 数据
    f.write('02,Candy,50\n')
data = pd.read_csv(data_file)  # 读取.scv文件
print(data)

运行效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 数据缺失处理——插值

  1. 数据部分数值缺失时,可以选择丢弃(不推荐,浪费数据信息)和插值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值