深度学习预备知识(pytorch)

目录

一、数据操作

二、数据预处理

三、线性代数

四、 自动微分


一、数据操作

张量由一个数值组成的数组

torch.arange(12)  # 包含以0开始的前12个整数

张量的形状:

x.shape  # torch.Size([12])

改变一个张量的形状而不改变元素数量和元素值:

X = x.reshape(3, 4)  # 或x.reshape(-1,4)  或 x.reshape(3,-1)

全0:

torch.zeros((2, 3, 4))

全1:

torch.ones((2, 3, 4))

随机初始化参数的值

torch.randn(3, 4)  # 每个元素从均值为0、标准差为1的正态分布中随机采样

标准算术运算符(+-*/**

求幂

torch.exp(x)

把多个张量连结在一起

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)  # 沿行(轴0,形状的第一个元素)连结两个矩阵

torch.cat((X, Y), dim=1)  # 按列(轴1,形状的第二个元素)连结两个矩阵

通过逻辑运算构建二元张量

X == Y  # 如果X和Y在该位置相等,新张量中相应位置为True,否则为False

广播机制:先通过适当复制元素来扩展一个或两个数组然后对生成的数组执行按元素操作

a = torch.arange(3).reshape((3, 1))  

b = torch.arange(2).reshape((1, 2))

a + b  # 矩阵a将复制列, 矩阵b将复制行,然后再按元素相加

索引:第一个元素的索引是0,最后一个元素索引是-1

X[-1]  # X最后一个元素

X[1:3] # X第2、3个元素

X[0:2, :]  # 访问X第1行和第2行的所有元素

为X额外分配内存:

X = X + Y  # 将取消引用X指向的张量,而是指向新分配的内存处的张量

切片:

X[:] = X + Y  # 原地执行数据更新

X += Y  # 原地执行数据更新

二、数据预处理

使用pandas软件包

import os

os.makedirs(os.path.join('..', 'data'), exist_ok=True)

data_file = os.path.join('..', 'data', 'house_tiny.csv')  

# 把一个文件路径的字符串连接起来,形成这个文件的完整的路径。../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')

从创建的CSV文件中加载原始数据集

import pandas as pd  # 导入pandas包

data = pd.read_csv(data_file)   # 读取data_file文件

print(data)

 

三、线性代数

访问张量的长度:

len(x)

复制A:

A = torch.arange(20, dtype=torch.float32).reshape(5, 4)B = A.clone()  # 通过分配新内存,将A的一个副本分配给B

矩阵A的转置:

A.T

降维:

A_sum_axis0 = A.sum(axis=0)  # 沿0轴降维以生成输出向量

A_sum_axis1 = A.sum(axis=1)  # 汇总所有列的元素降维(轴1)

平均值:

A.sum(axis=[0, 1])  # SameasA.sum()

A.mean()

A.sum() / A.numel()

A.sum() / A.shape

沿指定轴降低张量的维度

A.mean(axis=0)

A.sum(axis=0) / A.shape[0]

sum_A = A.sum(axis=1, keepdims=True)  # 保持轴数不变

乘积

点积:相同位置的按元素乘积再求

torch.dot(x, y)  # torch.sum(x * y)

矩阵-向量积:

torch.mv(A, x)  # A的列维数(沿轴1的长度)必须与x的维数(其长度)相同

矩阵-矩阵乘法:

torch.mm(A, B)  # A的列维数必须与B的行数相同

范数

L2范数

u = torch.tensor([3.0, -4.0])

torch.norm(u)  # tensor(5.)

L1范数

torch.abs(u).sum()   # tensor(7.)

四、 自动微分

x = torch.arange(4.0)

x.requires_grad_(True)  # 等价于x=torch.arange(4.0,requires_grad=True)

y = 2 * torch.dot(x, x)

y.backward()  # 求导

x.grad  #输出导数

x.grad.zero_()  #把x.grad清零

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Atlantixx

如有问题,欢迎留言交流

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值