深入浅出Pytorch打卡二
程序员文章站
2022-06-21 15:06:25
...
import torch
?torch.tensor # ? + 想查找到函数即可展示它的定义信息,这是jupyter notebook的特别功能,jupyter利于可视化展示
# 创建tensor,用dtype指定类型,注意类型匹配!!!
a = torch.tensor(1.0, dtype = torch.float) # dtype即default type
b = torch.tensor(1, dtype = torch.long)
c = torch.tensor(1.0, dtype = torch.int8) # 类型不匹配!!!
print(a, b, c)
# 使用指定类型的函数随机初始化指定大小的tensor
d = torch.FloatTensor(2, 3)
e = torch.IntTensor(2)
f = torch.IntTensor([1, 2, 3, 4])
print(d, '\n', e, '\n', f)
# tensor和numpy array之间的互相转换。
# tensor专门为机器学习而设计,可以求导、支持GPU、并行计算等;而numpy array用于科学计算
import numpy as np
g = np.array([[1, 2, 3],[4, 5, 6]])
h = torch.tensor(g)
print(h)
i = torch.from_numpy(g)
print(i)
j = h.numpy()
print(j)
# 常见的构造tensor的函数
k = torch.rand(2, 3)
l = torch.ones(2, 3)
m = torch.zeros(2, 3)
n = torch.arange(0, 10, 2) # [0, 10)每隔2取一个数
print(k, '\n', l, '\n', m, '\n', n)
# 查看tensor的维度信息(两种方式)
print(k.shape)
print(k.size())
# tensor的运算
o = torch.add(k, 1)
print(o)
# tensor的索引和numpy类似
print(o[:, 1])
print(o[1, :])
# 改变tensor形状的神器:view / reshape
print(o.view(3, 2))
print(o.view(-1, 3)) # -1表示自动计算该维度
# tensor的广播机制,这里要注意,容易出错!!!
p = torch.arange(1, 3).view(1, 2)
print(p)
q = torch.arange(1, 4).view(3, 1)
print(q)
print(p + q) # tensor会自动扩维来匹配计算
# 扩展或压缩tensor维度:squeeze。
# 这可以用来匹配维度
print(o)
r = o.unsqueeze(1)
print(r)
print(r.shape)
s = r.squeeze(0) # 只能缩维度为1的维度!!!
print(s)
print(s.shape)
s = r.squeeze(1)
print(s)
print(s.shape)
t = torch.arange(0, 20).reshape(4, 5) # view也可以,但是形状必须匹配前面数值的范围
print(t)
u = t.sum()
print(u)
v = torch.sum(t, dim = 1, keepdim = True) # dim = 0是对列求和,保留行;dim = 1是对行求和,保留列;keepdim是保留维度形状
print(v)
# 自动求导示例
import torch
x1 = torch.tensor(1.0, requires_grad = True)
x2 = torch.tensor(2.0, requires_grad = True)
y = x1 + 2 * x2
# 首先查看每个变量是否需要求导
print(x1.requires_grad)
print(x2.requires_grad)
print(y.requires_grad)
# 查看每个变量导数大小。此时还未反向传播,因此导数不存在
print(x1.grad.data)
print(x2.grad.data)
print(y.grad.data)
# 反向传播后看导数大小
y = x1 + 2 * x2
y.backward() # 导数是会累积的,如果不清零,每次计算都会加上上次的导数
print(x1.grad.data)
print(x2.grad.data)
# 尝试不允许求导,会出现什么情况?
x1 = torch.tensor(1.0, requires_grad = False)
x2 = torch.tensor(2.0, requires_grad = False)
y = x1 + 2 * x2
y.backward()
上一篇: JS获取video原始宽高
下一篇: QT 加载歌词LRC文件
推荐阅读
-
PyTorch搭建一维线性回归模型(二)
-
深入浅出WPF 第二部分(3)
-
深入浅出WPF 第二部分(1)
-
深入浅出KNN算法(二) 实践篇
-
读书笔记之第二回深入浅出关键字---对抽象编程:接口和抽象类
-
深度之眼Pytorch打卡(十五):Pytorch卷积神经网络部件——转置卷积操作与转置卷积层(对转置卷积操作全网最细致分析,转置卷积的stride与padding,转置与反卷积名称论证)
-
Datawhale Pandas研习社 第二次打卡记录
-
第二章 Pytorch基础 Chapter 2-1/2 安装驱动的过程
-
第二节:PyTorch基础Tensor,Autograd和nn
-
pytorch学习第三次打卡