pytorch创建和操作tensor

import torch
import numpy as np

### 1. 由函数创建
x = torch.zeros(5, 3, dtype=torch.int64) # 指定数据类型
print(x.dtype)
x = torch.zeros(5, 3)   # 默认数据类型为torch.float32
print(x.dtype)

x = torch.rand(5, 3)

x = torch.torch.ones(10,2,3)
x = torch.empty(5, 3)

# Returns a tensor filled with random numbers from a normal distribution
x = torch.randn(2, 3)
# help(torch.randn)
print(x)

# Returns a tensor filled with random numbers from a uniform distribution 
# on the interval [0,1)
x = torch.rand(2, 3)
print(x)

x = torch.eye(5)
print(x)

### 2. 从列表创建
x = torch.tensor([[1., -1.], [1., -1.]]) 

## 从 numpy array创建
x = torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
print(x)

# torch tensor 和 numpy array互换
a = torch.ones(5) 
b = a.numpy()

a = np.ones(5) 
b = torch.from_numpy(a)

x = torch.randn(1)
print(x)   # 一维tensor
print(x.item()) # Python number
print(x.numpy()) # numpy 一维数组

### 3. 通过现有的Tensor来创建
x = torch.ones(2,3)
print(x)
print(x.dtype)
x = x.new_ones(5, 3, dtype=torch.float64) # 返回的tensor默认具有相同的torch.dtype和torch.device

print(x) 
x = torch.randn_like(x, dtype=torch.float) # 指定新的数据类型
print(x)

### 4. 查看tensor大小和形状
x = torch.randn(5,3,2)
print(x)
print(x.size())
print(x.shape)

### 5. 改变tensor形状
a = torch.randn(5,3,2)
print(a.size())
a = a.view(-1, 5)
print(a.size())

#b = torch.Tensor([1,2,3]).reshape((3,1))
b = torch.tensor([1,2,3]).reshape((3,1))
print(b)


### 6. 查看tensor id
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])

id_before = id(y)

#y = y + x
#print(id(y) == id_before) # False

y[:] = y + x
print(id(y) == id_before) # True

### 7. tensor运算
x = torch.rand(5, 3)
y = torch.rand(5, 3)

print(x + y)

print(torch.add(x, y))

result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)

y.add_(x)
print(y)

z = x * 3
print(z)

# 对应元素相乘,矩阵形状一样
print(torch.mul(x, y))
print(x * y) 

# 矩阵形成,前一矩阵的列数等于后一矩阵的行数
a = torch.ones(3,4)
b = torch.ones(4,2)
print(torch.mm(a, b))

# 批处理,最后两个维度进行torch.mm操作
# batched matrix x batched matrix
tensor1 = torch.randn(10, 3, 4)
tensor2 = torch.randn(10, 4, 5)
print(torch.matmul(tensor1, tensor2).size())


### 8. tensor克隆
x = torch.randn(5,3,2)

print(x)
x_cp = x.clone()
print(x_cp)

print(id(x) == id(x_cp)) # False

print(id(x),id(x.view(-1,5))) # False

### 9. 指定tensor在CPU或GPU上。

device = torch.device('cuda' if torch.cuda.is_available() else
'cpu')
print(device)
x = torch.ones(5,3,device=device)
print(x)

x = torch.ones(5,3) 
x = x.to(device) # 转移
print(x)

### 10. tensor梯度
x = torch.rand(2, 2, requires_grad=True)
print(x)
print(x.grad_fn)
print(x.grad)

# 构建计算图,再求x的梯度
y = 3*x
print(y)
print(y.grad_fn)

print(y.view(-1,4))

z = y * y
z = z.sum()
print(z.grad_fn)

print(x.is_leaf, y.is_leaf, z.is_leaf)

z.backward()  # z要求是标量
print(x.grad)

参考:

https://pytorch.org/docs/stable/tensors.html

你可能感兴趣的:(pytorch,人工智能,python)