pyTorch基础入门练习
时间:2022-05-07
本文章向大家介绍pyTorch基础入门练习,主要内容包括import导入、创建Tensors、获取Tensor部分值、产生随机数据、Tensor运算、Tensor维度变型reshaping、Computation Graphs and Automatic Differentiation、Deep Learning Building Blocks: Affine maps, non-linearities and objectives、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
import导入
import torch#基本的torch函数
import torch.autograd as autograd#自动求导
import torch.nn as nn#神经网络类都在这个里面
import torch.nn.functional as F#几乎所有的激励函数
import torch.optim as optim#优化
创建Tensors
#create 1D vector
V_data = [1., 2., 3.]
V = torch.Tensor(V_data)#我用的是pyCharm编辑器,输入torch给的提示没有Tensor函数,其实是有的
print(V)
1
2
3
[torch.FloatTensor of size 3]
#create 2D vector
M_data = [[1., 2., 3.], [4., 5., 6.]]
M = torch.Tensor(M_data)
print(M)
1 2 3
4 5 6
[torch.FloatTensor of size 2x3]
#create 3D vector
T_data = [[[1.,2.], [3.,4.]],
[[5.,6.], [7.,8.]]]
T = torch.Tensor(T_data)
print(T)
(0 ,.,.) =
1 2
3 4
(1 ,.,.) =
5 6
7 8
[torch.FloatTensor of size 2x2x2]
获取Tensor部分值
#我就觉得这里比TensorFlow好用多了QAQ
print(V[0])
print(M[0])
print(T[0])
1.0
1
2
3
[torch.FloatTensor of size 3]
1 2
3 4
[torch.FloatTensor of size 2x2]
产生随机数据
x = torch.randn((3,4,5))
print(x)
(0 ,.,.) =
1.4533 0.0593 0.2027 -1.0107 -0.3175
-0.1847 0.3021 0.0848 -1.2445 -0.5568
-0.2796 -0.5961 -0.3000 -0.2782 1.4920
1.4030 1.0875 -0.5814 -1.2006 0.2690
(1 ,.,.) =
-0.7093 -0.4939 0.7491 0.9133 0.4221
1.3949 2.5685 -0.4359 -0.7788 1.0251
1.6232 -1.2432 0.3403 -1.0551 1.3790
-1.5632 -0.9772 0.3963 -0.1890 0.0032
(2 ,.,.) =
-0.3360 -0.5571 -0.6641 -1.5845 -0.8766
-0.1809 -1.0035 1.7093 0.9176 1.6438
1.6955 0.6816 0.5978 -0.1379 -0.3877
1.0876 1.2371 -0.7378 -0.7647 0.0544
[torch.FloatTensor of size 3x4x5]
Tensor运算
x = torch.Tensor([1., 2., 3.])
y = torch.Tensor([4., 5., 6.])
z = x + y
print(z)
5
7
9
[torch.FloatTensor of size 3]
[res] torch.cat( [res,] x_1, x_2, [dimension] )
x_1 = torch.randn(2, 5)
y_1 = torch.randn(3, 5)
z_1 =torch.cat([x_1, y_1])#没有最后一个参数,默认是0,则最终维度的第0维度为x_1与y_1第0维度的和,最终维度的其他维度不变.以下同理
print(z_1)
x_2 = torch.randn(2, 3)
y_2 = torch.randn(2, 5)
z_2 = torch.cat([x_2, y_2], 1)
print(z_2)
0.6372 0.7380 0.9324 0.0626 -0.3678
1.1819 2.1591 0.2445 0.0064 0.7760
-0.7765 -0.6797 0.1814 0.3948 1.7398
-0.2957 -0.6972 3.7052 -0.1943 0.4159
0.7385 -0.2365 1.4243 -0.0044 -0.7645
[torch.FloatTensor of size 5x5]
-0.0256 -0.6597 -0.1897 0.4361 0.1680 0.6513 -0.0433 -1.5741
-1.4514 0.0949 -0.7783 0.8568 -0.8722 0.0364 -0.0998 0.9265
[torch.FloatTensor of size 2x8]
Tensor维度变型reshaping
x = torch.randn(2, 3, 4)
print(x)
(0 ,.,.) =
0.6294 -0.3965 1.3737 1.6951
-0.5477 -1.5385 -0.0288 0.8104
-0.4208 -0.4469 0.0184 0.9507
(1 ,.,.) =
-0.2843 -0.0695 -0.1747 2.3774
1.1067 0.1980 -2.0712 -0.0670
-1.4900 0.0716 -0.7605 0.4611
[torch.FloatTensor of size 2x3x4]```
view转换维数
print(x.view(2,12))#将234 -> 2*12
Columns 0 to 9 0.6294 -0.3965 1.3737 1.6951 -0.5477 -1.5385 -0.0288 0.8104 -0.4208 -0.4469 -0.2843 -0.0695 -0.1747 2.3774 1.1067 0.1980 -2.0712 -0.0670 -1.4900 0.0716
Columns 10 to 11 0.0184 0.9507 -0.7605 0.4611 [torch.FloatTensor of size 2x12]```
print(x.view(2,-1))#-1的话,意味着最后的相乘为维数,这里为2*之后的成绩
#和上面的一样
Columns 0 to 9
0.6294 -0.3965 1.3737 1.6951 -0.5477 -1.5385 -0.0288 0.8104 -0.4208 -0.4469
-0.2843 -0.0695 -0.1747 2.3774 1.1067 0.1980 -2.0712 -0.0670 -1.4900 0.0716
Columns 10 to 11
0.0184 0.9507
-0.7605 0.4611
[torch.FloatTensor of size 2x12]
Computation Graphs and Automatic Differentiation
x = autograd.Variable(torch.Tensor([1., 2., 3]), requires_grad=True)
print(x)
print(x.data)#.data显示具体数据
#找不同
Variable containing:
1
2
3
[torch.FloatTensor of size 3]
1
2
3
[torch.FloatTensor of size 3]
y = autograd.Variable( torch.Tensor([4., 5., 6]), requires_grad=True )
z = x + y
print(z.data)
5
7
9
[torch.FloatTensor of size 3]
.creator是生成器
print(z.creator)
#因为是z = x + y 所以,z运算是add
<torch.autograd._functions.basic_ops.Add object at 0x10b04f128>
显示z中所有元素的和
s = z.sum()
print(s)
Variable containing:
21
[torch.FloatTensor of size 1]
s.backward()#反向传播
print(x.grad)#对x求导
Variable containing:
1
1
1
[torch.FloatTensor of size 3]
#答案解释
#x = [1,2,3]
#y = [4,5,6]
#z = x + y = [x0+y0, x1+y1, x2+y2]
#s = z.sum() = x0+y0+x1+y1+x2+y2
#x.grad 在s运算中对x求导 也就是当中的x0,x1,x2求导 为1,1,1
Deep Learning Building Blocks: Affine maps, non-linearities and objectives
Affine maps 也可以说是线性映射,即为f(x) = Ax + b nn.Linear(inputSize,outputSize,bias=True) 输入(N, inputSize) 输出(N, outputSize)
lin = nn.Linear(5,3)
data = autograd.Variable(torch.randn(2, 5))
print(lin(data))
Variable containing:
-0.1838 -0.1833 -0.6425
0.2675 0.0263 0.0482
[torch.FloatTensor of size 2x3]
Non-Linearities 非线性,常用的函数有 tanh(x),σ(x),ReLU(x) 这些都是激励函数 在pytorch中大部分激励函数在torch.functional中
data = autograd.Variable( torch.randn(2, 2) )
print(data)
print (F.relu(data))#relu函数是小于零是0,大于零就是它本身
Variable containing:
-2.0620 1.4252
0.5694 0.2251
[torch.FloatTensor of size 2x2]
Variable containing:
0.0000 1.4252
0.5694 0.2251
[torch.FloatTensor of size 2x2]
Softmax and Probabilities softmax是x_i/sum(x)
data = autograd.Variable( torch.randn(5) )
print(data)
print(F.softmax(data))
print(F.softmax(data).sum())
print(F.log_softmax(data))
Variable containing:
0.6861
0.1695
-0.4775
-2.0097
0.7039
[torch.FloatTensor of size 5]
Variable containing:
0.3340
0.1992
0.1043
0.0225
0.3400
[torch.FloatTensor of size 5]
Variable containing:
1
[torch.FloatTensor of size 1]
Variable containing:
-1.0967
-1.6133
-2.2604
-3.7925
-1.0789
[torch.FloatTensor of size 5]
- 使用Docker环境快速搭建靶机环境
- Java标准I/O流编程一览笔录
- 十分钟学perl够用(客服MM都懂了)
- Java多线程并发编程一览笔录
- Tomcat6/7应用服务器-禁用RC4等弱密码套件
- mybaits3整合spring总结
- 如何使用Airgeddon找回WiFi密码
- 设计缺陷将导致亚马逊Echo变身成为监听设备
- Unity引擎与C#脚本简介
- Redis分布式缓存系统Lua脚本食用指引
- 基于复杂方案OWSAP CsrfGuard的CSRF安全解决方案(适配nginx + DWR)
- XMLHttpRequest对象如何兼容各浏览器使用?
- Java使用wsdl生成axis版本webservice服务端/客户端代码
- Java微信支付快速入门&工具类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅析Android高斯模糊实现方案
- Android 自定义验证码输入框的实例代码(支持粘贴连续性)
- _countof和sizeof
- Flutter适配深色模式的方法(DarkMode)
- RecyclerView+SnapHelper实现无限循环筛选控件
- 详解Android 8.1.0 Service 中 弹出 Dialog的方法
- 短信收发类无错版JustinIO.cs
- Android快速实现无预览拍照功能
- RecyclerView+PagerSnapHelper实现抖音首页翻页的Viewpager效果
- android中使用react-native设置应用启动页过程详解
- 面试官问我单例模式真的安全吗?我懵逼了
- 详解Android使用CoordinatorLayout+AppBarLayout实现拉伸顶部图片功能
- Android自定义控制条效果
- Android使用MediaPlayer和TextureView实现视频无缝切换
- Android实现静默拍照功能