From 501526195ea6430b51e69ef4326fdffaf056ae0e Mon Sep 17 00:00:00 2001 From: sun1638650145 <1638650145@qq.com> Date: Fri, 29 Mar 2024 23:04:24 +0800 Subject: [PATCH] 20240329 --- PyTorch.md | 215 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 136 insertions(+), 79 deletions(-) diff --git a/PyTorch.md b/PyTorch.md index b93bd65..1505ff4 100644 --- a/PyTorch.md +++ b/PyTorch.md @@ -6,7 +6,7 @@ | 版本 | 描述 | 注意 | 适配M1 | | ----- | ------------- | ---- | ------ | -| 2.1.0 | 深度学习框架. | - | 是 | +| 2.2.1 | 深度学习框架. | - | 是 | ## 1.1.arange() @@ -162,7 +162,19 @@ d = Categorical(probs=probs) d.sample() ``` -## 1.10.exp() +## 1.10.eq() + +逐元素计算张量的数值是否相等.|`torch.Tensor` + +```python +import torch + +tensor = torch.Tensor([1, 2, 3, 4]) +tensor = torch.eq(input=tensor, # Tensor|需要比较的张量. + other=2) # Tensor or float|需要比较的张量或者数值. +``` + +## 1.11.exp() 返回输入张量的指数值.|`torch.Tensor` @@ -172,7 +184,7 @@ import torch tensor = torch.exp(input=torch.Tensor([0, 1, 0.5])) # Tensor|输入的数据. ``` -## 1.11.from_numpy() +## 1.12.from_numpy() 从`numpy.ndarray`中创建`Tensor`. @@ -184,7 +196,19 @@ arr = np.asarray([1, 2]) tensor = from_numpy(arr) # np.ndarray|输入的数据. ``` -## 1.12.IntTensor() +## 1.13.full() + +创建一个指定形状的张量填充指定数值.|`torch.Tensor` + +```python +import torch + +tensor = torch.full(size=[2, 3], # sequence of ints|张量的形状. + fill_value=2024, # Number|填充张量的数值. + dtype=torch.int32) # torch.dtype(可选)|张量的数据类型. +``` + +## 1.14.IntTensor() 初始化一个`IntTensor`, 数据类型为`torch.int32`. @@ -194,9 +218,9 @@ from torch import IntTensor tensor = IntTensor(data=[1, 2]) # array-like|输入的数据. ``` -## 1.13.jit +## 1.15.jit -### 1.13.1.trace() +### 1.15.1.trace() 返回序列化模型用于在没有Python的环境中运行.|`torch.jit._trace.TopLevelTracedModule` @@ -207,7 +231,7 @@ traced_model = torch.jit.trace(func=model, # torch.nn.Module|要转换的模型 example_inputs=example_input) # torch.Tensor|模型输入的实例张量. ``` -## 1.14.load() +## 1.16.load() 加载模型. @@ -217,7 +241,7 @@ from torch import load model = load(f='./model.pt') # str or a file-like|文件路径. ``` -## 1.15.manual_seed() +## 1.17.manual_seed() 设置随机种子. @@ -227,7 +251,7 @@ import torch torch.manual_seed(seed=2022) # int|随机种子. ``` -## 1.16.masked_fill() +## 1.18.masked_fill() 将张量中的元素填充为指定值.|`torch.Tensor` @@ -244,7 +268,7 @@ tensor = torch.masked_fill(input=tensor, # torch.Tensor|输入的张量. value=9.5) # float|要填充的值. ``` -## 1.17.matmul() +## 1.19.matmul() 两个张量的矩阵乘积.|`torch.Tensor` @@ -258,7 +282,7 @@ x = torch.matmul(input=tensor0, # torch.Tensor|第一个张量. other=tensor1) # torch.Tensor|第二个张量. ``` -## 1.18.mean() +## 1.20.mean() 返回输入张量所有元素的均值.|`torch.Tensor` @@ -273,13 +297,13 @@ value = torch.mean(input=tensor, # torch.Tensor|输入的张量. keepdim=False) # bool|False|输出张量是否保留输入张量的维度. ``` -## 1.19.nn +## 1.21.nn | 版本 | 描述 | 注意 | | ---- | -------------------------- | ---- | | - | Torch的计算图的基本构建块. | - | -### 1.19.1.Conv2d() +### 1.21.1.Conv2d() 实例化2D卷积层. @@ -292,7 +316,7 @@ layer = Conv2d(in_channels=1, # int|输入图片的色彩通道数量. padding='same') # int, tuple or {'same', 'valid'}(可选)|0|填充方式. ``` -### 1.19.2.CrossEntropyLoss() +### 1.21.2.CrossEntropyLoss() 实例化交叉熵损失函数. @@ -302,7 +326,7 @@ from torch.nn import CrossEntropyLoss loss = CrossEntropyLoss() ``` -### 1.19.3.Dropout() +### 1.21.3.Dropout() 实例化Dropout层. @@ -312,7 +336,7 @@ from torch import nn layer = nn.Dropout(p=0.5) # float|0.5|随机丢弃比例. ``` -### 1.19.4.Embedding() +### 1.21.4.Embedding() 实例化嵌入层. @@ -323,7 +347,7 @@ layer = nn.Embedding(num_embeddings=100, # int|嵌入字典的大小. embedding_dim=10) # int|每个嵌入向量的大小. ``` -### 1.19.5.Flatten() +### 1.21.5.Flatten() 实例化展平层. @@ -333,9 +357,9 @@ from torch import nn layer = nn.Flatten() ``` -### 1.19.6.functional +### 1.21.6.functional -#### 1.19.6.1.binary_cross_entropy_with_logits() +#### 1.21.6.1.binary_cross_entropy_with_logits() 计算带有sigmoid的二分类交叉熵的值.|`torch.Tensor` @@ -349,7 +373,7 @@ loss = binary_cross_entropy_with_logits(input=y_pred, # torch.Tensor|预测值. target=y) # torch.Tensor|真实值. ``` -#### 1.19.6.2.relu() +#### 1.21.6.2.relu() 应用relu函数在输入的张量上.|`torch.Tensor` @@ -361,7 +385,7 @@ tensor = torch.Tensor([-2., -1., 0., 1., 2.]) tensor = relu(input=tensor) # torch.Tensor|输入的张量. ``` -#### 1.19.6.3.softmax() +#### 1.21.6.3.softmax() 应用softmax函数在输入的张量上.|`torch.Tensor` @@ -374,9 +398,9 @@ tensor = softmax(input=tensor, # torch.Tensor|输入的张量. dim=0) # int|指定的维度. ``` -### 1.19.7.init +### 1.21.7.init -#### 1.19.7.1.xavier_uniform_() +#### 1.21.7.1.xavier_uniform_() 使用均匀分布的Xavier方法初始化输入张量.|`torch.Tensor` @@ -388,7 +412,7 @@ tensor = torch.ones(3, 4) tensor = xavier_uniform_(tensor=tensor) # torch.Tensor|输入的张量. ``` -### 1.19.8.Linear() +### 1.21.8.Linear() 实例化全连接层. @@ -399,7 +423,7 @@ layer = nn.Linear(in_features=32, # int|输入神经元的数量. out_features=32) # int|神经元的数量. ``` -### 1.19.9.LogSoftmax() +### 1.21.9.LogSoftmax() 实例化LogSoftmax层. @@ -409,7 +433,7 @@ from torch import nn layer = nn.LogSoftmax(dim=0) # int(可选)|None|指定的维度. ``` -### 1.19.10.MaxPool2d() +### 1.21.10.MaxPool2d() 实例化2D最大池化层. @@ -419,7 +443,7 @@ from torch.nn import MaxPool2d layer = MaxPool2d(kernel_size=2) # int or tuple|池化窗口. ``` -### 1.19.11.Module() +### 1.21.11.Module() 实例化`Module`. @@ -443,7 +467,7 @@ class Model(nn.Module): return self.output_layer(x) ``` -#### 1.19.11.1.eval() +#### 1.21.11.1.eval() 设置模块为评估模式. @@ -451,7 +475,7 @@ class Model(nn.Module): model.eval() ``` -#### 1.19.11.2.load_state_dict() +#### 1.21.11.2.load_state_dict() 加载模块的权重. @@ -459,7 +483,7 @@ model.eval() model.load_state_dict(state_dict) # dict|参数字典. ``` -#### 1.19.11.3.named_parameters() +#### 1.21.11.3.named_parameters() 返回模块名称参数组成元组的迭代器. @@ -467,7 +491,7 @@ model.load_state_dict(state_dict) # dict|参数字典. model.named_parameters() ``` -#### 1.19.11.4.parameters() +#### 1.21.11.4.parameters() 返回模块参数迭代器. @@ -475,7 +499,7 @@ model.named_parameters() model.parameters() ``` -#### 1.19.11.5.state_dict() +#### 1.21.11.5.state_dict() 返回模块参数字典. @@ -483,7 +507,7 @@ model.parameters() model.state_dict() ``` -#### 1.19.11.6.train() +#### 1.21.11.6.train() 设置模块为训练模式. @@ -491,7 +515,7 @@ model.state_dict() model.train() ``` -### 1.19.12.ModuleList() +### 1.21.12.ModuleList() 实例化`ModuleList`. @@ -504,7 +528,7 @@ layers = nn.ModuleList(modules=(linear_layer, linear_layer)) # list of Module or tuple of Module|Module组成的列表. ``` -### 1.19.13.Parameter() +### 1.21.13.Parameter() 实例化Parameter层, 可将张量视为一个`Module`. @@ -516,7 +540,7 @@ tensor = torch.randn(3, 4) layer = nn.Parameter(data=tensor) # torch.Tensor|参数张量. ``` -### 1.19.14.ReLU() +### 1.21.14.ReLU() 实例化ReLU层. @@ -526,7 +550,7 @@ from torch import nn layer = nn.ReLU() ``` -### 1.19.15.Sequential() +### 1.21.15.Sequential() 实例化`Sequential`. @@ -540,7 +564,7 @@ model = nn.Sequential( ) ``` -#### 1.19.15.1.add_module() +#### 1.21.15.1.add_module() 添加一个模块到`Sequential`结尾, 使用给定名称. @@ -549,7 +573,7 @@ model.add_module(name='flatten_layer', # str|模块名称. module=nn.Flatten()) # nn.Module|模块. ``` -#### 1.19.15.2.append() +#### 1.21.15.2.append() 添加一个模块到`Sequential`结尾. @@ -557,7 +581,7 @@ model.add_module(name='flatten_layer', # str|模块名称. model.append(module=nn.Flatten()) # nn.Module|模块. ``` -### 1.19.16.Softmax() +### 1.21.16.Softmax() 实例化Softmax层. @@ -567,11 +591,11 @@ from torch import nn layer = nn.Softmax(dim=0) # int(可选)|None|指定的维度. ``` -### 1.19.17.utils +### 1.21.17.utils -#### 1.19.17.1.rnn +#### 1.21.17.1.rnn -##### 1.19.17.1.1.pad_sequence() +##### 1.21.17.1.1.pad_sequence() 对不同长度的`Tensor`列表进行填充.|`torch.Tensor` @@ -589,7 +613,7 @@ new_tensor_list = pad_sequence(sequences=tensor_list, # list of torch.Tensor| padding_value=0.0) # float(可选)|0.0|填充元素的值. ``` -## 1.20.no_grad() +## 1.22.no_grad() 禁用梯度计算的上下文管理器(可以减少内存消耗). @@ -600,7 +624,7 @@ with no_grad(): # 代码. ``` -## 1.21.ones() +## 1.23.ones() 生成全一张量.|`torch.Tensor` @@ -610,13 +634,13 @@ import torch tensor = torch.ones(size=[2, 3]) # sequence of ints|张量的形状. ``` -## 1.22.optim +## 1.24.optim | 版本 | 描述 | 注意 | | ---- | ----------------- | ----------------------------------- | | - | Torch的优化器API. | 1.优化器相同的类方法都写在`Adam`里. | -### 1.22.1.Adam() +### 1.24.1.Adam() 实例化`Adam`优化器. @@ -627,7 +651,7 @@ optimizer = Adam(params, # 需要优化的参数. lr=1e-3) # float(可选)|1e-3|学习率. ``` -#### 1.22.1.1.step() +#### 1.24.1.1.step() 更新梯度. @@ -635,7 +659,7 @@ optimizer = Adam(params, # 需要优化的参数. optimizer.step() ``` -#### 1.22.1.2.zero_grad() +#### 1.24.1.2.zero_grad() 将梯度设置为零. @@ -643,7 +667,7 @@ optimizer.step() optimizer.zero_grad() ``` -### 1.22.2.SGD() +### 1.24.2.SGD() 实例化随机梯度下降优化器. @@ -654,7 +678,7 @@ optimizer = SGD(params, # 需要优化的参数. lr=1e-2) # float|学习率. ``` -## 1.23.rand() +## 1.25.rand() 生成均匀分布随机张量.|`torch.Tensor` @@ -664,7 +688,7 @@ from torch import rand tensor = rand(3, 4) # sequence of ints|张量的形状. ``` -## 1.24.randn() +## 1.26.randn() 生成正态分布随机张量.|`torch.Tensor` @@ -674,7 +698,7 @@ from torch import randn tensor = randn(3, 4) # sequence of ints|张量的形状. ``` -## 1.25.Size() +## 1.27.Size() 实例化张量的形状. @@ -684,7 +708,7 @@ import torch size = torch.Size([3, 4]) ``` -## 1.26.save() +## 1.28.save() 保存模型或模型参数. @@ -697,7 +721,7 @@ save(obj=model, # 要保存的模型. f='./model.pt') # str or a file-like|文件路径. ``` -## 1.27.sin() +## 1.29.sin() 返回输入张量的正弦值.|`torch.Tensor` @@ -707,7 +731,7 @@ import torch tensor = torch.sin(input=torch.Tensor([0, 1, 0.5])) # Tensor|输入的数据. ``` -## 1.28.std() +## 1.30.std() 返回输入张量所有元素的标准差.|`torch.Tensor` @@ -722,7 +746,7 @@ value = torch.std(input=tensor, # torch.Tensor|输入的张量. keepdim=False) # bool|False|输出张量是否保留输入张量的维度. ``` -## 1.29.Tensor() +## 1.31.Tensor() 初始化一个`Tensor`. @@ -732,7 +756,7 @@ from torch import Tensor tensor = Tensor(data=[1, 2]) # array-like|输入的数据. ``` -### 1.29.1.backward() +### 1.31.1.backward() 计算张量的梯度(反向传播). @@ -740,7 +764,7 @@ tensor = Tensor(data=[1, 2]) # array-like|输入的数据. tensor.backward() ``` -### 1.29.2.clip() +### 1.31.2.clip() 逐元素裁切张量.|`torch.Tensor` @@ -752,7 +776,7 @@ tensor = tensor.clip(min=1, # int or float|None|最小值. max=5) # int or float|None|最大值. ``` -### 1.29.3.detach() +### 1.31.3.detach() 禁用张量的梯度.|`torch.Tensor` @@ -760,7 +784,7 @@ tensor = tensor.clip(min=1, # int or float|None|最小值. tensor = tensor.detach() ``` -### 1.29.4.device +### 1.31.4.device 张量的存储设备.|`torch.device` @@ -768,7 +792,7 @@ tensor = tensor.detach() tensor.device ``` -### 1.29.5.dim() +### 1.31.5.dim() 张量的维度.|`int` @@ -776,7 +800,7 @@ tensor.device tensor.dim() ``` -### 1.29.6.dtype +### 1.31.6.dtype 张量的数据类型.|`torch.dtype` @@ -784,7 +808,18 @@ tensor.dim() tensor.dtype ``` -### 1.29.7.grad +### 1.31.7.expand() + +增加张量的维度.|`torch.Tensor` + +```python +import torch + +tensor = torch.Tensor([1, 2]) +tensor = tensor.expand(size=[1, 1, 2]) # sequence of ints|期望增加后的张量形状. +``` + +### 1.31.8.grad 张量的梯度.|`torch.Tensor` @@ -792,7 +827,7 @@ tensor.dtype tensor.grad ``` -### 1.29.8.grad_fn +### 1.31.9.grad_fn 张量的梯度函数.|`class` @@ -800,7 +835,7 @@ tensor.grad tensor.grad_fn ``` -### 1.29.9.item() +### 1.31.10.item() 将张量的值转换为Python数字.|`float` @@ -811,7 +846,7 @@ tensor = torch.Tensor(data=[1]) tensor.item() ``` -### 1.29.10.requires_grad +### 1.31.11.requires_grad 张量是否需要返回梯度.|`bool` @@ -819,7 +854,7 @@ tensor.item() tensor.requires_grad ``` -### 1.29.11.requires_grad_() +### 1.31.12.requires_grad_() 设置张量是否需要返回梯度. @@ -827,7 +862,7 @@ tensor.requires_grad tensor.requires_grad_(requires_grad=True) # bool|True|是否需要返回梯度. ``` -### 1.29.12.reshape() +### 1.31.13.reshape() 指定张量的形状(如果的可能的话返回是输入的视图).|`torch.Tensor` @@ -838,7 +873,7 @@ tensor = torch.Tensor([1, 2, 3, 4]) tensor = tensor.reshape((2, 2)) # tuple of ints|新的形状. ``` -### 1.29.13.shape +### 1.31.14.shape 张量的形状.|`torch.Size` @@ -846,7 +881,7 @@ tensor = tensor.reshape((2, 2)) # tuple of ints|新的形状. tensor.shape ``` -### 1.29.14.to() +### 1.31.15.to() 执行张量的设备转换.|`torch.Tensor` @@ -861,7 +896,7 @@ if cuda.is_available(): # 'xla', 'lazy', 'vulkan', 'meta', 'hpu'}|转换到的目标设备. ``` -### 1.29.15.transpose() +### 1.31.16.transpose() 对张量维度`dim0`和`dim1`进行转置操作.|`torch.Tensor` @@ -874,7 +909,18 @@ tensor = tensor.transpose(dim0=1, # int|要被转置的第一个维度. dim1=0) # int|要被转置的第二个维度. ``` -### 1.29.16.unsqueeze() +### 1.31.17.type_as() + +将张量转换为给定张量的数据类型.|`torch.Tensor` + +```python +import torch + +tensor = torch.Tensor([1, 2]) +tensor = tensor.type_as(other=torch.tensor([1], dtype=torch.float16)) # Tensor|给定的张量. +``` + +### 1.31.18.unsqueeze() 增加张量的维度.|`torch.Tensor` @@ -885,7 +931,7 @@ tensor = Tensor(data=[1, 2, 3]) tensor = tensor.unsqueeze(dim=1) # int|添加新维度的位置. ``` -### 1.29.17.view() +### 1.31.19.view() 指定张量的形状(返回是输入的视图).|`torch.Tensor` @@ -896,15 +942,26 @@ tensor = torch.Tensor([1, 2, 3, 4]) tensor = tensor.view((2, 2)) # tuple of ints|新的形状. ``` -## 1.30.utils +## 1.32.triu() + +返回二维张量的上三角部分.|`torch.Tensor` + +```python +import torch + +tensor = torch.triu(input=torch.rand(3, 3), # torch.Tensor|输入的张量. + diagonal=0) # int(可选)|0|考虑的对角线. +``` + +## 1.33.utils -### 1.30.1.data +### 1.33.1.data | 版本 | 描述 | 注意 | | ---- | -------------------- | ---- | | - | Torch的数据加载工具. | - | -#### 1.30.1.1.DataLoader() +#### 1.33.1.1.DataLoader() 实例化数据加载器. @@ -928,7 +985,7 @@ dataloader = DataLoader(dataset=arr, # array-like|要加载的数据集. collate_fn=collate_fn) # callable(可选)|None|整理函数. ``` -#### 1.30.1.2.Dataset() +#### 1.33.1.2.Dataset() 自定义一个数据集. @@ -952,7 +1009,7 @@ class MyDataset(Dataset): return feature, label ``` -## 1.31.zeros() +## 1.34.zeros() 生成全零张量.|`torch.Tensor`