预习作业:掌握Numpy中有关张量维度的知识
1.常用的机器学习,深度学习开源框架价绍
PyTorch
- FaceBook2017年发布的全新机器学习包
- 功能很强大(强推)
- 擅长数据分析
- 支持动态图创建
- 支持GPU的Tensor库训练,加速计算
- 可以替代Numpy
- 简单实用
- 社区完善
TensorFlow
- 谷歌第二代机器学习系统
- 顾名思义,张量and流
- 由于架构很灵活,可移植性很好,工业领域用的很多,真神
- 但不是很容易上手,所以看起来有点史
- 学术界不是很经常用
MindSpore
- 史中史
- 唯一真史
Scikit-Learn
- 基于Python的机器学习模块
- 由David Cournapeau于2007年发起
- 基本功能分为6个模块:分类,回归,聚类,数据降维,模型选择,数据准备,预处理
- 对于具体的机器学习问题分为3个模块:数据准备&预处理,模型选择&训练,模型验证&参数调优
- 支持多种格式的数据
- 用的也比较多
- 可以一试
2.PyTorch中的数据呈现方式:Scalar,Vector,Matrix,Tensor
“Torch loves tensor”
默认的数据结构是tensor(),中文翻译为张量
1 | #直观理解: |
以下大标题所说的tensor都指PyTorch默认的数据结构,而不是具体某一个三维的张量
辛苦大家,适应一下这种说法
2.1自定义一些tensor
torch.tensor(xxxx):Create a tensor
1 | import torch |
tensor(7)
torch.tensor([7,4])
tensor([ [0, 7],
[2, 1] ])
tensor([ [ [0, 7],
[2, 1] ] ])
ndim:Check the dimensions of scalar
维度计算快捷方法:数一数几层中括号
1 | scalar.ndim |
0
1
2
3
item:Turn tensor into a Python number
顾名思义,把物体(数字)从tensor中取出来看看他是个什么东西)
1 | scalar.item |
7
Check the shape of the vector,2 elements are put into the brackets
涉及到一些维度的知识
1 | vector.shape |
torch.Size([2])
torch.Size([2, 2])
torch.Size([1, 2, 2])
2.2初始化一些特殊的tensor
Tensor默认数据类型为float.32
1 | #Tensor datatypes |
(torch.Size([3]), torch.float32)
1 | float_16_tensor=torch.tensor([3.0,6.0,9.0], |
torch.float16
随机初始化
1 | random_tensor=torch.rand(size=(3,4)) |
(tensor([ [ 0.1093, 0.8989, 0.8195, 0.3373] , [ 0.1179, 0.2801, 0.3570, 0.5607], [0.8991, 0.3874, 0.1780, 0.7507] ] ), torch.float32)
全0
1 | zeros=torch.zeros(size=(3,4)) |
全1
1 | ones=torch.ones(size=(3,4)) |
等差数列笑声
1 | #In Python, you can use range() to create a range. However in PyTorch, torch.range() is deprecated and may show an error in the future. |
2.3Tensor基本数学运算
对于每个元素:
加
减
乘
1 | tensor = torch.tensor([1, 2, 3]) |
tensor([11, 12, 13])
1 | tensor * 10 |
tensor([10, 20, 30])
注意:tensor自身没变
1 | tensor |
tensor([1, 2, 3])
reassign:tensor自身改变
1 | # Add and reassign |
tensor([-9, -8, -7])
使用multiply函数对tensor中每个元素乘10
但是tensor自身不变
1 | torch.multiply(tensor,10) |
tensor([10, 20, 30])
1 | # Original tensor is still unchanged |
逐个元素相乘
1 | print(tensor,"*",tensor) |
tensor([1, 2, 3]) * tensor([1, 2, 3])
Equals= tensor([1, 4, 9])
设置随机数tensor
1 | random_tensor_A=torch.rand(3,4) |
Does tensor_A equal to tensor_B?
tensor([[False, False, False, False], [False, False, False, False], [False, False, False, False]])
1 | import random |
tensor( [ [True, True, True, True],[ True, True, True, True ], [True, True, True, True ] ] )
重点:矩阵乘法
1 | #Matrix Multiplication |
一个很容易犯的错
这里需要对矩阵b进行转置处理
否则无法按照定义进行矩阵乘法计算
1 | tensor_A=torch.tensor([[1,2], |
定义一个[2,6]由随机数组成的线性层
利用torch.nn.Linear,实现矩阵相乘
1 | #设置随机数 |
torch.Size([3, 2])
torch.Size([3, 6])
2.4Tensor下标计算
一级索引
二级索引
三级索引
1 | # Let's index bracket by bracket |
First square bracket: tensor([ [ 1, 2, 3], [4, 5, 6], [7, 8, 9] ] )
Second square bracket: tensor([1, 2, 3])
Third square bracket: 1
考考聪明的你们我是笨蛋
1 | a[:,0] |
2.5重点:实现PyTorch中的Tensor与Numpy中的Array相互转换
torch.from_numpy(array):Numpy array->Pytorch Tensor
torch.tensor.numpy():Pytorch Tensor->Numpy array
1 | import numpy as np |
(array([1., 2., 3., 4., 5., 6., 7.]), tensor([1., 2., 3., 4., 5., 6., 7.]))
array改变,tensor不变
1 | array=array+1 |
(array([2., 3., 4., 5., 6., 7., 8.]), tensor([1., 2., 3., 4., 5., 6., 7.]))
1 | tensor=torch.ones(7)#dtype=float32 |
(tensor([1., 1., 1., 1., 1., 1., 1.]), array([1., 1., 1., 1., 1., 1., 1.], dtype=float32))
3.(挖坑)CUDA安装
检查CUDA是否安装成功
1 | import torch |
True
True为安装成功