Learning note of《Through pytorch》chapter2

//本文为学习笔记,思路与部分代码均参考自课程文件

 

第一部分:搭建jupyter

1.给base安装上nb_conda

(base)conda install nb_conda

2.在对应的环境中安装ipykernel

(Jimsum) conda install ipykernel

3.在环境中

(jimsum)python -m ipykernel install --name jimsum

4.保持激活环境,打开jupyter,选择对应的jupyter文件打开

第二部分:张量

张量是最基本的数据容器

  • 0维张量/标量 标量是一个数字

  • 1维张量/向量 1维张量称为“向量”。

  • 2维张量 2维张量称为矩阵

  • 3维张量 公用数据存储在张量 时间序列数据 股价 文本数据 彩色图片(RGB

2.1 tensor新建

方法1:构建随机矩阵

x = torch.rand(4, 3) 
print(x)

方法2:添加默认类型

x = torch.zeros(4, 3, dtype=torch.long)
print(x)   #定义一个4*3的全0矩阵,且默认数据类型为long

方法3:直接使用数据

x = torch.tensor([5.5, 3]) #直接使用数据构造
print(x)

4.获取维度

print(x.size())
print(x.shape)

5.常见新建tensor工具

2.1 tensor操作

data:具体数值

dtype:默认数据结构

device:指定计算机构(GPU等)

require_grad:是否允许求导

pin_memory:

1.加法

# 加法运算  也可以:print(torch.add(x, y))
o = torch.add(k,l)
print(o)

2.索引(索引出来的跟源矩阵同源,有一个改变另一个也随即改变)

# tensor的索引方式与numpy类似
print(o[:,1])
print(o[0,:])

3.改变tensor的形状  torch.view:

print(o.view((3,2)))
print(o.view(-1,2))  #-1表达的是这一边的维数由矩阵元素决定,若矩阵有6位,那如上两行一样

4.广播机制:当对两个形状不同的 Tensor 按元素运算时,可能会触发广播(broadcasting)机制:先适当复制元素使这两个 Tensor 形状相同后再按元素运算。

# tensor的广播机制(使用时要注意这个特性)
p = torch.arange(1, 3).view(1, 2)
print(p)
q = torch.arange(1, 4).view(3, 1)
print(q)
print(p + q)

#p、q形状不一样,当让他们两个相加的时候,会适当复制到一样再相加
tensor([[1, 2]])
tensor([[1],
        [2],
        [3]])
tensor([[2, 3],
        [3, 4],
        [4, 5]])

5.扩展与压缩tensor的维度

压缩:(unsqueeze)

# 扩展&压缩tensor的维度:squeeze
print(o)
r = o.unsqueeze(1)
print(r)
print(r.shape)
tensor([[1.2256, 1.2177, 1.5296],
        [1.1153, 1.4385, 1.3054]])
tensor([[[1.2256, 1.2177, 1.5296]],

        [[1.1153, 1.4385, 1.3054]]])
torch.Size([2, 1, 3])

扩展:(squeeze)

t = r.squeeze(1)#前方有压缩到一维
print(t)
print(t.shape)
tensor([[1.2256, 1.2177, 1.5296],
        [1.1153, 1.4385, 1.3054]])
torch.Size([2, 3])

2.2自动求导机制

1.requires_gradTrue,那么它将会追踪对于该张量的所有操作。当完成计算后可以通过调用.backward(),来自动计算所有的梯度。这个张量的所有梯度将会自动累加到.grad属性。

x1 = torch.tensor(1.0, requires_grad=True)
x2 = torch.tensor(2.0, requires_grad=True)
#在新建tensor的时候要先申明require_grad=True,表示需要求导
#可以首先查看每个变量是否需要求导
print(x1.requires_grad)

2.正向传播

## 反向传播后才能求导数大小
y = x1 + 2*x2  ##正向传播
y.backward()   ##反向传播
print(x1.grad.data)  ##求导数
print(x2.grad.data)  ##求导数

#导数会累积

3.利用.detach()停止累计

2.3并行计算简介

在编写程序中,当我们使用了 cuda() 时,其功能是让我们的模型或者数据迁移到GPU当中,通过GPU开始计算。

并行计算的方法:

1.模型拆分

就是将模型拆拆分,并分别到各个gpu计算

2.任务层内拆分

 3.数据拆分(主流)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值