【深度学习】P1 深度学习数据结构

目录


准备工作

conda 环境创建:

bash 复制代码
conda create --name d2l python=3.9 -y
conda env list
conda activate d2l

pip 安装深度学习框架包:

bash 复制代码
pip install torch==1.12.0
pip install torchvision==0.13.0

至此,完成准备工作。


基本操作

读取数据

Pandas 包调用 read_csv 函数读取 csv 数据:

python 复制代码
import pandas as pd

data_file = r"house.csv"
data = pd.read_csv(data_file)
print(data)

处理缺失值

处理数据中的缺失值 NaN,一般有插值法以及删除法两种策略。

  • 插值法:用替代值弥补缺失值;
  • 删除法:直接忽略包含缺失值的示例。

插值法案例如下:

  • 对于连续值,使用均值插值法:
python 复制代码
# 代码接上
inputs, output = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
  • 对于离散值,按值进行分类:
python 复制代码
# 代码接上
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

如图所示,pandas 自动将列 Alley 转化为 Alley_PaveAlley_nan 两列,并转化为数字 0、1 进行标注。

此上,我们完成了一个简单数据集的缺失值处理操作。


张量的基础内容

张量,是深度学习的数据结构,对比 Numpy,其具两点优势:

  • 支持使用 GPU 加速运算;
  • 包含自动微分重要功能。

具有一个轴的张量对应数学上的向量,具有两个轴的张量对应数学上的矩阵。

将数据转化为张量

torch.tensor 方法,将数据转换为张量数据结构。

python 复制代码
X = torch.tensor(X.to_array(dtype=float))
y = torch.tensor(y.to_array(dtype=float))
print(X)

创建一个行向量

troch.arange() 方法,创建一个行向量张量 x

python 复制代码
x = torch.arange(12)

获取张量的形状

x.shape 方法,获取张量的形状。

python 复制代码
print(x.shape)

获取张量的数量

x.numel() 方法,获取张量中元素的个数。

python 复制代码
print(x.numel())

改变张量的形状

x.reshape(x, y) 方法,改变张量的形状而不改变张量中元素个数和元素值。

python 复制代码
# 把张量x从形状为(12,)的行向量转换为形状为(3, 4)的矩阵。
X = x.reshape(3, 4)
print("原格式:", x.shape)
print("新格式:", X.shape)
python 复制代码
# 此外,可以通过-1自动计算另一个维度的大小从而改变形状
X = x.reshape(3, -1)
X = x.reshape(-1, 4)
X = x.reshape(3, 4)

创建常量张量

torch.zeros((x, y)) 创建元素都初始化为 0 的张量。
torch.ones((x, y, z)) 创建元素都初始化为 1 的张量。

python 复制代码
x = torch.zeros((2, 3, 4))
y = torch.ones((2, 3, 4))

张量的更多操作

张量支持四则运算

python 复制代码
# 请重点关注乘法
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
print("加法:", x + y)
print("减法:", x - y)
print("乘法", x * y)
print("除法", x / y)
print("求幂运算", x ** y)

张量支持拼接连接

torch.cat((x, y), dim=) 将张量 x 与张量 y 按照维度 dim 进行拼接。

python 复制代码
import torch

x = torch.arange(12).reshape(3, 4)
y = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
print("横向拼接:", torch.cat((x, y), dim=1))
print("纵向拼接:", torch.cat((x, y), dim=0))

张量支持逻辑运算符

张量可直接使用逻辑运算符对对应位置的内容进行判断。

python 复制代码
x == y

张量支持广播机制

在上述四则运算以及拼接内容中,我们都使用了形状相同的两个张量进行运算和操作,但是如果两个张量形状不同,还能支持哪些操作?

假设有张量 a (3, 1) 与 b (1, 2),若进行四则运算,会因形状不匹配报错,但若两个张量的形状有某种关系,我们可以将两个矩阵广播到一个更大的 (3, 2) 矩阵,如下:

python 复制代码
a = torch.arange(3).reshape(3, 1)
b = torch.arange(2).reshape(1, 2)
a, b
a + b
a * b

张量索引与切片

张量同 Python 数组,可以通过索引进行访问,可以进行切片。

python 复制代码
x = torch.arange(12).reshape(3, 4)
x[0]
x[-1]
x[1:3]
python 复制代码
x[1, 2]
x[2, 1:]
x[-1, :]

将张量转换为其他 Python 对象

python 复制代码
X = torch.arange(12).reshape(3, 4)
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)

推荐书籍

本文为博主阅读学习李沐《动手学深度学习(Pytorch)》一书时学习笔记内容,若读者有意愿兴趣,请访问:https://d2l.ai/

相关推荐
liuyuzhongcc7 分钟前
List 接口中的 sort 和 forEach 方法
java·数据结构·python·list
小天努力学java8 分钟前
AI赋能传统系统:Spring AI Alibaba如何用大模型重构机票预订系统?
人工智能·spring
Fuweizn25 分钟前
在工业生产中,物料搬运环节至关重要,搬运机器人开启新篇章
人工智能·智能机器人·复合机器人
计算机小白一个1 小时前
蓝桥杯 Java B 组之背包问题、最长递增子序列(LIS)
java·数据结构·蓝桥杯
AL.千灯学长2 小时前
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
人工智能·gpt·ios·ai·苹果vision pro
卑微的小鬼2 小时前
数据库使用B+树的原因
数据结构·b树
cookies_s_s2 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
LCG元2 小时前
大模型驱动的围术期质控系统全面解析与应用探索
人工智能
lihuayong3 小时前
计算机视觉:主流数据集整理
人工智能·计算机视觉·mnist数据集·coco数据集·图像数据集·cifar-10数据集·imagenet数据集
政安晨3 小时前
政安晨【零基础玩转各类开源AI项目】DeepSeek 多模态大模型Janus-Pro-7B,本地部署!支持图像识别和图像生成
人工智能·大模型·多模态·deepseek·janus-pro-7b