包
- 导入
import torch
函数
基本操作
创建tensor
# 创建未初始化的tensor
x = torch.empty(5, 3)
# 该创建方法可以用于指定运算输出
result = torch.empty(5, 3)
torch.add(x, y, out=result)
# 创建随机初始化的tensor
x = torch.rand(5, 3)
# 创建全为0,并指定数据类型的tensor
x = torch.zeros(5, 3, dtype=torch.long)
x = torch.zeros(1000) # 1000行一列
x = torch.ones(1000)
# 直接根据数据创建
x = torch.tensor([5.5, 3])
# 通过现有tensor创建
x = x.new_ones(5, 3, dtype=torch.float)
x = torch.randn_like(x, dtype=torch.float)
# 会默认继承原tensor的一些属性,例如数据类型
获取、改变tensor的形状
```python获取
x.size() x.shape返回的torch.Size其实是一个tuple元组,支持所有tuple的操作
x.shape[0]是最高维,越往后面走维度越低
改变
y = x.view(15) z = x.view(-1, 5)# -1所指的维度可以根据其它维度的值推出来
view具有共享data但不共享内存的特征
如果不想共享数据,可以使用clone函数
x_cp = x.clone().view(15)
<a name="WzMPN"></a>
### 加法
```python
z = x + y
z = torch.add(x, y)
y.add_(x)
# 广播机制
索引
索引具有共享内存的特征
# 索引出来的结果与原数据共享内存,也即修改一个,另一个会跟着修改。
y = x[0, :]
y += 1 # x也会跟着修改
转换tensor
将tensor转换成python number
x = torch.randn(1)
y = x.item()
将tensor转换成numpy
a = torch.ones(5)
b = a.numpy()
# 共享内存
将numpy转换为tensor ```python
共享内存
a = np.ones(5) b = torch.from_numpy(a)
不共享内存
c = torch.tensor(a)
<a name="qG3LD"></a>
### 求平均值
```python
y = torch.tenser([0., 1.])
y = y.mean()
print(y) # tensor(0.50000)
和机器学习有关的
- detach()
- 从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个Variable永远不需要计算其梯度,不具有grad。即使之后重新将它的requires_grad置为true,它也不会具有梯度grad。
- 这样我们就会继续使用这个新的Variable进行计算,后面当我们进行反向传播时,到该调用detach()的Variable就会停止,不能再继续向前进行传播。
torch.arange(-8.0, 8.0, 0.1, requires_grad=True).numpy()