1.张量与矩阵、向量、标量的关系是怎样的?
标量只有大小概念,没有方向的概念。通过一个具体的数值就能表达完整。
向量主要有2个维度:大小、方向。大小:箭头的长度表示大小方向:箭头所指的方向表示方向
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。
张量是多维数组,目的是把向量、矩阵推向更高的维度
这4个概念是维度不断上升的,我们用点线面体的概念来比喻解释会更加容易理解:
点——标量(scalar)
线——向量(vector)
面——矩阵(matrix)
体——张量(tensor)
2.Variable"赋予"张量什么功能?
0.4.0 版本后Variable已并入Tensor
Variable是torch.autograd中的数据类型,主要用于封装Tensor,进行
data: 被包装的Tensor
grad: data的梯度
grad_fn: 创建Tensor的Function,是自动求导的关键
requires_grad:指示是否需要梯度
is_leaf:指示是否叶子结点
3.采用torch.from_numpy创建张量,并打印查看ndarray和张量数据的地址
import torch
import numpy as np
arr=np.array([[1,2,3],[4,5,6]])
t=torch.from_numpy(arr)
print('t:',t)
print('id(t)',id(t))
4.实现torch.normal()创建张量的四种模式。
torch.normal()
- 功能:生成正太分布(高斯分布)
- mean为标量,std为标量
- mean为标量,std为张量
- mean为张量,std为标量
- mean为张量,std为张量
# =============================== exmaple 2 =============================== # flag = True flag = False if flag: # mean:张量 std: 张量 mean = torch.arange(1, 5, dtype=torch.float) std = torch.arange(1, 5, dtype=torch.float) t_normal = torch.normal(mean, std) print("mean:{}\nstd:{}".format(mean, std)) print(t_normal) # =============================== exmaple 3 =============================== # flag = True flag = False if flag: # mean:标量 std: 标量 mean = 1 std = 10 t_normal = torch.normal(mean, std,size=(3,3)) print("mean:{}\nstd:{}".format(mean, std)) print(t_normal) # =============================== exmaple 4 =============================== # flag = True flag = False if flag: # mean:张量 std: 标量 mean=torch.arange(1,5,dtype=torch.float) std=2 t_normal=torch.normal(mean,std) print("mean:{}\nstd:{}".format(mean,std)) print(t_normal) # =============================== exmaple 5 =============================== flag = True # flag = False if flag: # mean:标量 std: 张量 mean=2 std=torch.arange(1,5,dtype=torch.float) t_normal=torch.normal(mean,std) print("mean:{}\nstd:{}".format(mean,std)) print(t_normal)