【进阶】PyTorch张量操作与计算
发布时间: 2024-06-26 19:05:22 阅读量: 70 订阅数: 107
![【进阶】PyTorch张量操作与计算](https://img-blog.csdnimg.cn/46c2be702fff4c2aabcf2346c3eb3ccc.png)
# 1. **2.1 张量创建和初始化**
张量是 PyTorch 中的基本数据结构,用于表示多维数据。创建张量有以下几种方法:
- **torch.tensor():**从 Python 列表、元组或 NumPy 数组创建张量。
- **torch.zeros() 和 torch.ones():**创建指定形状和数据类型的全零或全一张量。
- **torch.rand() 和 torch.randn():**创建指定形状的均匀分布或正态分布的随机张量。
张量初始化对于神经网络的训练至关重要。常用的初始化策略包括:
- **均匀分布:**将张量中的元素随机初始化为均匀分布。
- **正态分布:**将张量中的元素随机初始化为正态分布。
- **Xavier 初始化:**针对神经网络层中的权重,使用特定的方差进行初始化。
# 2. 张量操作技巧
### 2.1 张量创建和初始化
#### 2.1.1 创建张量的方法
PyTorch提供了多种创建张量的便捷方法,包括:
- `torch.zeros(shape)`:创建指定形状的全零张量。
- `torch.ones(shape)`:创建指定形状的全一张量。
- `torch.rand(shape)`:创建指定形状的均匀分布随机张量。
- `torch.randn(shape)`:创建指定形状的正态分布随机张量。
- `torch.full(shape, fill_value)`:创建指定形状并填充指定值的张量。
- `torch.arange(start, end, step)`:创建指定范围和步长的等差数列张量。
- `torch.linspace(start, end, steps)`:创建指定范围和步数的等差数列张量,与`torch.arange`不同的是,`torch.linspace`确保包含端点。
**代码块:**
```python
import torch
# 创建全零张量
zeros = torch.zeros((3, 4))
print(zeros)
# 创建全一张量
ones = torch.ones((3, 4))
print(ones)
# 创建均匀分布随机张量
rand = torch.rand((3, 4))
print(rand)
# 创建正态分布随机张量
randn = torch.randn((3, 4))
print(randn)
# 创建指定值填充的张量
full = torch.full((3, 4), 5)
print(full)
# 创建等差数列张量
arange = torch.arange(0, 10, 2)
print(arange)
# 创建等差数列张量,确保包含端点
linspace = torch.linspace(0, 10, 5)
print(linspace)
```
**逻辑分析:**
以上代码块展示了使用PyTorch创建张量的不同方法。`zeros`和`ones`创建了全零和全一张量,`rand`和`randn`创建了随机分布的张量,`full`创建了填充指定值的张量,`arange`和`linspace`创建了等差数列张量。
#### 2.1.2 张量初始化的策略
张量初始化是神经网络训练中至关重要的一步,它决定了网络的初始权重和偏置值。PyTorch提供了多种张量初始化策略,包括:
- `torch.nn.init.constant_(tensor, val)`:将张量初始化为常数值。
- `torch.nn.init.normal_(tensor, mean=0, std=1)`:将张量初始化为正态分布,指定均值和标准差。
- `torch.nn.init.xavier_uniform_(tensor)`:使用Xavier均匀初始化,适用于ReLU激活函数。
- `torch.nn.init.xavier_normal_(tensor)`:使用Xavier正态初始化,适用于tanh和sigmoid激活函数。
- `torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in')`:使用Kaiming均匀初始化,适用于ReLU激活函数,指定负斜率和模式。
- `torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in')`:使用Kaiming正态初始化,适用于tanh和sigmoid激活函数,指定负斜率和模式。
**代码块:**
```python
import torch
import torch.nn.init as init
# 创建张量
tensor = torch.randn((3, 4))
# 使用常数初始化
init.constant_(tensor, 0.5)
print(tensor)
# 使用正态分布初始化
init.normal_(tensor, mean=0, std=1)
print(tensor)
# 使用Xavier均匀初始化
init.xavier_uniform_(tensor)
print(t
```
0
0