深度学习笔记——pytorch的使用(上)

聊到深度学习, 大家第一感觉就是很高大上。就像我们曾经说到机器学习,很多人也是感觉很高大上,但是慢慢接触之后,发现其无非是数学+编程实现,所以从线性回归开始,不断学习,把各种机器学习方法都学习了一遍,并能够通过Python的sklearn库编程实现。
有很多朋友和我聊到学习深度学习这个事情,我会推荐他们去看一些相关理论算法,从CNN、RNN到LSTM,从各种传统的深度学习网络结构到比较新的网络结构。在这个过程中发现了一点,就是他们看完了网络结构和算法原理后,往往难以下手去操作,因为Python使用sklearn库实现机器学习的流程非常方便,而且学习了Python的numpy、pandas基础即可快速上手,而深度学习的编程则需要更上一层,对Python新手不太友好,基础部分的张量各种操作和计算图编程都会让新手头大,而深度学习还面临着选择深度学习框架的问题,可供我们选择的框架实在太多,例如较为流行的Tensorflow、Pytorch、Keras、Mxnet、PaddlePaddle等等。各种相关的书也是如雨后春笋般出版出来,我翻看过一些书,还看过一些目录,发现了一个现象,就是各种深度学习框架书在对应的深度学习框架基础部分讲解往往不够详细,让人看完觉得跳跃感很大,而过于强调各种网络结构的实现,这十分不利于新手进行学习。而且初学者会了解到深度学习需要使用GPU训练模型,对于没有GPU配置的初学者,往往觉得学习之路出现了第一道坎,而对于有GPU的初学者,往往因为GPU环境搭建太复杂而从入门到放弃。其实没有GPU环境,也是可以进行深度学习编程学习的。

第一步——安装pytorch

首先进入pytorch官网
https://pytorch.org/
根据你的python环境和计算机配置选择
深度学习笔记——pytorch的使用(上)_第1张图片
将Run this Command里面的语句复制到cmd窗口就可以完成下载

pytorch引入与张量创建

  • pytorch引入
import torch
import numpy as np
  • 创建张量
arr = np.ones((3,3))
print("数据类型为:",arr.dtype)
t = torch.tensor(arr)
print(t)

数据类型为:
float64 tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)

arr = np.array([[1,2,3],[4,5,6]])
t = torch.from_numpy(arr)
print(arr)
print(t)

[1 2 3]
[4 5 6]]
tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)

修改张量

arr = np.array([[1,2,3],[4,5,6]])
t = torch.from_numpy(arr)

#修改array内容
arr[0,0] = 999

print(arr)
print(t)

[[999 2 3]
[ 4 5 6]]
tensor([[999, 2, 3],
[ 4, 5, 6]], dtype=torch.int32)

t1 = torch.tensor([1,2,3])#创建一个t1张量,赋一个初始值
t = torch.zeros((2,3),out=t1)#将创建的t张量输出到t1
print(t,'\n',t1)
print(id(t),id(t1),id(t)==id(t1))

tensor([[0, 0, 0],
[0, 0, 0]])
tensor([[0, 0, 0],
[0, 0, 0]])
2084605375816 2084605375816 True

input = torch.empty(3, 5)
t = torch.zeros_like(input)
print(t)

tensor([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])

t = torch.full((2,2),8)
print(t)

tensor([[8., 8.],
[8., 8.]])

input = torch.empty(3, 5)
t = torch.full_like(input,8)
print(t)

tensor([[8., 8., 8., 8., 8.],
[8., 8., 8., 8., 8.],
[8., 8., 8., 8., 8.]])

t = torch.arange(1,9,2)
print(t)

tensor([1, 3, 5, 7])

t = torch.linspace(1,9,7)
print(t)

tensor([1.0000, 2.3333, 3.6667, 5.0000, 6.3333, 7.6667, 9.0000])

t = torch.logspace(start=-5, end=10,steps=4)
print(t)

tensor([1.0000e-05, 1.0000e+00, 1.0000e+05, 1.0000e+10])

t = torch.eye(4)
print(t)

tensor
([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])

生成正态分布数据的张量

#mean为张量,std为张量
mean = torch.arange(1,6,dtype=torch.float)
std = torch.arange(1,6,dtype=torch.float)
t = torch.normal(mean,std)
print("mean:{},std:{}".format(mean,std))
print(t)

mean:tensor([1., 2., 3., 4., 5.]),std:tensor([1., 2., 3., 4., 5.])
tensor([ 1.5956, -0.9349, 1.7945, 8.0524, 7.9456])

#mean为标量,std为标量
t = torch.normal(0.2,1.0,size=(5,))
print(t)

tensor([ 1.1192, -0.1618, 1.2117, -0.4006, 0.6756])

#mean为标量,std为张量
mean = 2
std = torch.arange(1,4,dtype=torch.float)
t = torch.normal(mean,std)
print("mean:{},std:{}".format(mean,std))
print(t)

mean:2,std:tensor([1., 2., 3.])
tensor([ 2.5615, 2.2416, -1.5931])

#mean为张量,std为标量
mean = torch.arange(1,4,dtype=torch.float)
std = 2
t = torch.normal(mean,std)
print("mean:{},std:{}".format(mean,std))
print(t)

mean:tensor([1., 2., 3.]),std:2
tensor([-0.9332, 3.0824, 1.1787])

看到这里,其实不难发现pytorch的很多用法与numpy类似
还是很好入门的

你可能感兴趣的:(Python机器学习与深度学习)