PyTorch学习基础知识一

Posted hhh江月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch学习基础知识一相关的知识,希望对你有一定的参考价值。

PyTorch学习基础知识一

一、Broadcasting、Tensor与Autograd

我们直接采用代码的形式来进行学习,下面的代码中也有相应的知识的叙述与介绍。


"""
f(x)=wx+b
w->weights
b->bias
"""

"""
广播机制(Broadcasting)

广播机制主要包含以下的几个部分:

1、让所有的输出数组都向其中shape最长的数组看齐,shape中不足的部分使用1来补全;

2、输出数组的shape是输入数组中的shape的最大值;

3、如果输入数组的某个轴和输出数组的对应的轴的长度相同的时候,或者其长度为1的时候,这个数组是能够用来计算
的,否则,就会出错;

4、当输入数组的某一个轴为1的时候,沿着此轴进行运算的时候都用此轴上的第一组值。

具体的举例参见Broadcasting(example).jpg
"""

"""
深度学习框架PyTorch

PyTorch实际上是Numpy的替代品,而且使用起来十分方便快捷。
PyTorch相对于TensorFlow而言比较简单。(所以 TensorFlow 的上手时间,肯定要比 PyTorch 长。)

Tensor:张量

从本质上面来说的话,Tensor其实也就是一个数组。

自动求导:
Autograd

Autograd 为所有 Tensor 上的操作提供了自动微分机制。
这是一个动态运行的机制,也就是说你的代码运行的时候,
反向传播过程就已经被定义了,且每迭代都会动态变化。
如果把 Tensor 的属性 .requires_grad 设置为 True,
就会追踪它的所有操作。完成计算后,
可以通过 .backward() 来自动完成所有梯度计算。

"""


import torch


x = torch.randn(6, 4, dtype=torch.float)
print(x)
# tensor([[ 0.9862, -0.8254, -1.1786,  0.8517],
#         [ 0.6637,  1.3759,  0.0275,  1.5593],
#         [ 1.1041, -0.6335, -1.0538,  1.1304],
#         [ 0.2675, -1.3835, -1.3349,  2.9404],
#         [ 1.1640,  0.2592,  0.6844,  0.5803],
#         [ 0.9688,  1.6834,  0.7145,  1.5934]])

y = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]])
print(y)
# tensor([[1, 2, 3, 4],
#         [5, 6, 7, 8]])


# 加法
x0 = torch.randn(5, 3)
y0 = torch.randn(5, 3)
result = torch.empty(5, 3)
torch.add(x0, y0, out=result)

# 这两个是一样的。
print(result)
print(y0.add_(x0))
# tensor([[ 1.1245, -0.2671, -0.9810],
#         [ 0.9452, -1.6079, -1.8099],
#         [ 1.2403, -1.8337,  0.5645],
#         [ 2.4768,  2.1873,  1.5201],
#         [-2.1194, -0.5494, -1.1040]])
# tensor([[ 1.1245, -0.2671, -0.9810],
#         [ 0.9452, -1.6079, -1.8099],
#         [ 1.2403, -1.8337,  0.5645],
#         [ 2.4768,  2.1873,  1.5201],
#         [-2.1194, -0.5494, -1.1040]])


# 这个是测试自动求导的机制的
# Autograd

x1 = torch.ones(2, 2, requires_grad=True)
print(x1)
y1 = x1 + 1
z1 = y1 * y1 * 2
out1 = z1.mean()
print(z1, out1)

out1.backward()
print(x1.grad)


# tensor([[1., 1.],
#         [1., 1.]], requires_grad=True)
# tensor([[8., 8.],
#         [8., 8.]], grad_fn=<MulBackward0>) tensor(8., grad_fn=<MeanBackward0>)
# tensor([[2., 2.],
#         [2., 2.]])


"""
tensor([[ 0.8389, -0.9816, -0.5000, -1.4477],
        [ 1.5592,  1.4960, -1.2355,  0.5627],
        [-0.9396, -0.1240, -0.3078,  0.0213],
        [ 1.2707, -0.3611,  0.7111,  0.3984],
        [ 0.1144, -0.8157, -0.3630,  1.7868],
        [ 0.8582,  0.6707, -0.1433,  1.6408]])
tensor([[1, 2, 3, 4],
        [5, 6, 7, 8]])
tensor([[ 1.9609,  0.1785,  2.6246],
        [-0.2639,  1.6323,  0.3627],
        [-2.6193, -1.3028,  0.3448],
        [ 0.6846,  0.4891,  1.2605],
        [-2.7221,  0.6624, -0.1272]])
tensor([[ 1.9609,  0.1785,  2.6246],
        [-0.2639,  1.6323,  0.3627],
        [-2.6193, -1.3028,  0.3448],
        [ 0.6846,  0.4891,  1.2605],
        [-2.7221,  0.6624, -0.1272]])
tensor([[1., 1.],
        [1., 1.]], requires_grad=True)
tensor([[8., 8.],
        [8., 8.]], grad_fn=<MulBackward0>) tensor(8., grad_fn=<MeanBackward0>)
tensor([[2., 2.],
        [2., 2.]])

Process finished with exit code 0

"""


二、卷积神经网络

"""
神经网络知识

Sigmoid函数(具体的形式参见Sigmoid函数.jpg)


损失函数(Cross Entropy Loss)
(交叉熵损失函数(Cross Entropy Loss))
(具体的形式参见:交交叉熵损失函数0.jpg,叉熵损失函数1.jpg 以及 交叉熵损失函数2.jpg)


梯度下降(Gradient Descent)
(梯度下降原理)


计算图
每次迭代训练,神经网络模型主要分成两个步骤:
1、正向传播(Forward Propagation);
2、反向传播(Back Propagation)。
(正向传播就是计算损失函数过程,反向传播就是计算参数梯度过程。)

使用计算图可以对参数进行求导


(逻辑回归、损失函数、梯度下降和计算图)

"""




三、GitHub分享

我把所有的内容都放在了GitHub中,有兴趣的可以上去看看完整的内容啦。

最后,感谢大家的阅读与支持啦。

以上是关于PyTorch学习基础知识一的主要内容,如果未能解决你的问题,请参考以下文章

深度学习——Pytorch基础

深度学习——Pytorch基础

PyTorch学习笔记:PyTorch生态简介

PyTorch学习笔记:模型定义修改保存

我是土堆 - Pytorch教程 知识点 学习总结笔记

PyTorch基础——迁移学习