本篇基于《深度学习框架-pytorch入门与实践》陈云
有一起监督学习打卡的小伙伴请私信
2.2 pytorch入门第一步
2.2.1 Tensor
# 分配矩阵空间但不初始化
#使用 [0-1] 随机初始化二维数组
#使用 初始化全为1的二维数组
#查看形状 ==2种 // 查看某一行某一列的形状
# 加法 ==5种 (1123第一次练习第三四五种出错)
#改变数值的加法 不改变数值的加法
#切片 取一行/一列
# numpy转tensor
#tensor转numpy 共享内存 只有tensor才可以用add_()函数
#使用cuda
2021.11.25 摸鱼了一天 剑哥刚通知三个小时后检查我学到哪里了 肝!
2.2.2 Autograd 自动微分
深度学习算法的本质是通过反向传播求导数
autograd.Variable 包含data grad grad_fn三种属性。data存储Tensor, grad储存Tensor的梯度,他们都是Variable。grad_fn指向Function
In [1]: import torch as t
In [2]: import torch.nn as nn
# 参数依次为batch_size, 通道数,长,宽
In [3]: inp = t.ones(1,1,9,9)
# 参数依次为输入通道数,输出通道数,卷积核
In [4]: con1 = nn.Conv2d(1,1,3)
#新增两个参数分别为步长,padding数
In [5]: con2 = nn.Conv2d(1,1,3,2,1)
In [6]: out1 = con1(inp)
[W NNPACK.cpp:79] Could not initialize NNPACK! Reason: Unsupported hardware.
#分析原因:网络问题
In [7]: out1 = con1(inp)
In [8]: out2 = con2(inp)
In [9]: out1.shape
Out[9]: torch.Size([1, 1, 7, 7])
#计算公式 输入(9)+1 - 卷积核数(3)=7
In [10]: out2.shape
Out[10]: torch.Size([1, 1, 5, 5])
#计算公式 输入(9)+padding(1*2) 视为12
12 + 1 - 卷积核数(3) 最后除以二 =5
卷积的本质是 输入和卷积核对应格相乘,然后把这9个积加起来,最后加bias (Wx+b)
maxpooling 是采样 只采最大的 即权重最大 可能为目标的概率最大