pytorch task1:PyTorch的基本概念

1.什么是PyTorch,为什么选择PyTorch?

(1)什么是PyTorch?

       PyTorch的前身便是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是很多主流深度学习框架比如Tensorflow等都不支持的。

       PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。

      好吧,这是从百科抄来的解释。

(2)为什么选择PyTorch?

       面对如此多的深度学习框架,我们为何要选择PyTorch 呢?Tensorflow 不是深度学习框架默认的老大吗,为什么不直接选择Tensorflow 而是要选择PyTorch 呢?下面分4个方面来介绍为何要使用PyTorch。

  (1)掌握一个框架并不能一劳永逸,现在深度学习并没有谁拥有绝对的垄断地位,就算是Google 也没有,所以只学习Tensorflow 并不够。同时现在的研究者使用各个框架的都有,如果你要去看他们实现的代码,至少也需要了解他们使用的框架,所以多学一个框架,以备不时之需。

  (2)Tensorflow 与Caffe 都是命令式的编程语言,而且是静态的,首先必须构建一个神经网络,然后一次又一次使用同样的结构,如果想要改变网络的结构,就必须从头开始。但是对于PyTorch,通过一种反向自动求导的技术,可以让你零延迟地任意改变神经网络的行为,尽管这项技术不是PyTorch 独有,但目前为止它实现是最快的,能够为你任何疯狂想法的实现获得最高的速度和最佳的灵活性,这也是PyTorch 对比Tensorflow 最大的优势。

  (3)PyTorch 的设计思路是线性、直观且易于使用的,当你执行一行代码时,它会忠实地执行,并没有异步的世界观,所以当你的代码出现Bug 的时候,可以通过这些信息轻松快捷地找到出错的代码,不会让你在Debug 的时候因为错误的指向或者异步和不透明的引擎浪费太多的时间。

  (4)PyTorch 的代码相对于Tensorflow 而言,更加简洁直观,同时对于Tensorflow高度工业化的很难看懂的底层代码,PyTorch 的源代码就要友好得多,更容易看懂。深入API,理解PyTorch 底层肯定是一件令人高兴的事。一个底层架构能够看懂的框架,你对其的理解会更深。

        额,这段也是抄的,内容来自https://blog.csdn.net/broadview2006/article/details/80133047

2.PyTorch安装(windows 7)

(1)python安装,当前最新的正式版本是python3.7.3,下载地址:https://www.python.org/ftp/python/3.7.3/python-3.7.3-amd64.exe

(2)安装Anaconda,要注意和python对应的版本,下载地址:https://www.anaconda.com/download/

附一张anaconda与python版本对应关系

(3)安装cuda(如果没有显卡,省略此步)额,好吧其实我没有显卡,于是省略了此步
(4)运行pytorch的安装命令,从官网可以生成安装命令:

ok,剩下漫长的等待就可以了。

3.pytroch基础概念

对于一个小白来说,没太看懂这个地方要解释什么,tensor?- -!

4.通用代码实现一个流程

以PyTorch Tensor实现一个2层的网络:

# Code in file tensor/two_layer_net_tensor.py

import torch



device = torch.device('cpu')

# device = torch.device('cuda') # Uncomment this to run on GPU



# N is batch size; D_in is input dimension;

# H is hidden dimension; D_out is output dimension.

N, D_in, H, D_out = 64, 1000, 100, 10



# Create random input and output data

x = torch.randn(N, D_in, device=device)

y = torch.randn(N, D_out, device=device)



# Randomly initialize weights

w1 = torch.randn(D_in, H, device=device)

w2 = torch.randn(H, D_out, device=device)



learning_rate = 1e-6

for t in range(500):

# Forward pass: compute predicted y

h = x.mm(w1)

h_relu = h.clamp(min=0)

y_pred = h_relu.mm(w2)



# Compute and print loss; loss is a scalar, and is stored in a PyTorch Tensor

# of shape (); we can get its value as a Python number with loss.item().

loss = (y_pred - y).pow(2).sum()

print(t, loss.item())



# Backprop to compute gradients of w1 and w2 with respect to loss

grad_y_pred = 2.0 * (y_pred - y)

grad_w2 = h_relu.t().mm(grad_y_pred)

grad_h_relu = grad_y_pred.mm(w2.t())

grad_h = grad_h_relu.clone()

grad_h[h < 0] = 0

grad_w1 = x.t().mm(grad_h)



# Update weights using gradient descent

w1 -= learning_rate * grad_w1

w2 -= learning_rate * grad_w2

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值