【深度学习】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/

相关推荐
NAGNIP11 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab12 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab12 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP15 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年16 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼16 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS16 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区17 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈17 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang18 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx