Pytorch基础与神经网络

Posted 知之Python

tags:

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

人工神经网络通常被称为神经网络或多层感知器(MLPMultilayerPerceptron),多层感知器也许是最有用的神经网络类型之一。多层感知器是一种前馈人工神经网络模型,其将输入的多个数据维度映射到单一的输出的数据维度上。感知器是单个神经元模型,它是较大神经网络的前身。多层感知器是一个研究如何模拟生物大脑来解决困难的计算任务的方法,如在机器学习的预测建模任务。目标不是创造大脑的模型,而是开发可用于解决困难问题的鲁棒性算法和数据结构的模型。

Pytorch是由facebook开源的一个深度学习计算的框架,目前的深度学习的框架可以将大量的科学运算,迁移到GPU上进行,从来提高运算的速度。本章将会介绍一下Pytorch的基础,这包括Pytorch的处理对象,运算操作,和数据操作,并介绍Pytorch中的线性模型以及逻辑回归模型,并进一步引申到全连接神经网络及神经网络中的反向传播和梯度下降等。

2.1 Pytorch的基本概念

Pytorch中有一些基本的概念,只有理解了这些基本概念才能有效的利用Pytorch来实现神经网络模型。

2.1.1 张量(Tensor)

Pytorch中的张量类似于numpy中ndarray,并且可以互相转换。张量是Pytorch中所有运算的基本类型,并且张量可以运行在GPU上。

在Pytorch中,张量有多重类型,如:FloatTensor,LongTensor等,更多的张量定义请参照Pytorch的doc,这里就不作说明。下面的代码是对张量的几种基本定义方式:

import torch

# Pytorch中默认张量为FloatTensor
a = torch.Tensor([[2, 3], [4, 8], [7, 9]])
print('a is: {}'.format(a))
print('a size is {}'.format(a.size()))

# 定义LongTensor张量
b = torch.LongTensor([[2, 3], [4, 8], [7, 9]])
print('b is: {}'.format(b))

# 定义全为0的空张量
c = torch.zeros((3, 2))
print('c is: {}'.format(c))

# 定义随机分配的张量
d = torch.rand((3, 2))
print('d is: {}'.format(d))

执行结果如下:

a is: 

 2  3

 4  8

 7  9

[torch.FloatTensor of size 3x2]

a size is torch.Size([3, 2])

b is: 

 2  3

 4  8

 7  9

[torch.LongTensor of size 3x2]

c is: 

 0  0

 0  0

 0  0

[torch.FloatTensor of size 3x2]

d is: 

 0.5245  0.0666

 0.0224  0.3148

 0.7619  0.2834

[torch.FloatTensor of size 3x2]


张量定义后,可以像操作numpy一样来操作张量。例如要修改上面例子中定义的张量a的第一个元素,代码如下:

# 修改张量的值
a[0, 1] = 100
print('new a is: {}'.format(a))

执行结果如下:

new a is: 

   2  100

   4    8

   7    9

[torch.FloatTensor of size 3x2]

在Pytorch中张量和Numpy中ndarray可以互相转化,代码如下:

# 张量转化为numpy
b_np = b.numpy()
print('conver b to numpy is: \n{}'.format(b_np))

import numpy as np
# 从numpy转换成张量
e = np.array([[2, 3], [4, 7]])
e_tensor = torch.from_numpy(e)
print('from numpy e to tensor is: {}'.format(e_tensor))

# 改变张量的类型
e_tensor_float = e_tensor.float()
print('convert e_tensor to float tensor is: {}'.format(e_tensor_float))

代码执行结果如下:

conver b to numpy is: 

[[2 3]

 [4 8]

 [7 9]]

from numpy e to tensor is: 

 2  3

 4  7

[torch.LongTensor of size 2x2]

convert e_tensor to float tensor is: 

 2  3

 4  7

[torch.FloatTensor of size 2x2]

如果,使用的工作站支持GPU运算,可以将张量放到GPU上,同样张量也可以从GPU上,放到CPU上,代码如下:

if torch.cuda.is_available():
# 将张量放到GPU上
   e_cuda = e_tensor_float.cuda()
print(e_cuda)
else:
# 将张量放到CPU上
   e_cpu = e_tensor_float.cup()
print(e_cpu)

2.1.2 变量(Variable)

ToBe Updated




以上是关于Pytorch基础与神经网络的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch学习基础知识一

零基础构建神经网络:使用PyTorch从零编写前馈神经网络代码

[Pytorch系列-50]:卷积神经网络 - FineTuning的统一处理流程与软件架构 - Pytorch代码实现

[Pytorch系列-49]:卷积神经网络 - 迁移学习的统一处理流程与软件架构 - Pytorch代码实现

201555332盛照宗—网络对抗实验1—逆向与bof基础

Pytorch基础与神经网络