深度学习入门学习笔记2(PyTorch入门)

深度学习入门教学1(Colaboratory使用教程)-CSDN博客

学会使用Colaboratory进行深度学习项目的实践开发后,我们进入PyTorch的初步学习和基础练习。

一、认识PyTorch

PyTorch是一个基于Torch库,底层由C++实现,应用于人工智能领域的开源Python机器学习库。

PyTorch包括torch.autograd、torch.nn、torch.optim等子模块。

PyTorch包含多种损失函数,包括 MSE(均方误差 = L2 范数)、交叉熵损失和负熵似然损失(对分类器有用)等。

PyTorch有以下两个特点。

  • GPU或 MPS 等硬件加速张量计算
  • 构建在反向自动求导系统上的深度神经网络

二、使用PyTorch

2.1定义数据

使用torch.Tensor 定义数据,tensor的意思是张量,是数字各种形式的总称。

张量是 PyTorch 中的核心数据抽象,PyTorch 支持各种张量子类型。通常地,一维张量称为向量(vector),二维张量称为矩阵(matrix)。

张量的数据类型包括:

  • torch.bool
  • torch.int8
  • torch.uint8
  • torch.int16
  • torch.int32
  • torch.int64
  • torch.half
  • torch.float
  • torch.double
  • torch.bfloat

接下来我们使用colab编程测试。

我们在谷歌云盘中创建colab项目进行编程。

import torch

# 可以是一个数
x = torch.tensor(666)
print(x)

# 可以是一维数组(向量)
x = torch.tensor([1,2,3,4,5,6])
print(x)

# 可以是二维数组(矩阵)
x = torch.ones(2,3)
print(x)

# 可以是任意维度的数组(张量)
x = torch.ones(2,3,4)
print(x)

创建Tensor有多种方法,包括:ones, zeros, eye, arange, linspace, rand, randn, normal, uniform, randperm, 使用的时候可以在线搜,下面主要通过代码展示。

# 创建一个空张量
x = torch.empty(5,3)
print(x)

# 创建一个随机初始化的张量
x = torch.rand(5,3)
print(x)

# 创建一个全0的张量,里面的数据类型为 long
x = torch.zeros(5,3,dtype=torch.long)
print(x)

# 基于现有的tensor,创建一个新tensor,
# 从而可以利用原有的tensor的dtype,device,size之类的属性信息
y = x.new_ones(5,3)   #tensor new_* 方法,利用原来tensor的dtype,device
print(y)

z = torch.randn_like(x, dtype=torch.float)    # 利用原来的tensor的大小,但是重新定义了dtype
print(z)

2.2定义操作

Tensor的操作(function),即所有用Tensor进行的各种运算,可以理解为Tensor的各类功能函数,其中包括:

  • 基本运算,加减乘除,求幂求余
  • 布尔运算,大于小于,最大最小
  • 线性运算,矩阵乘法,求模,求行列式

基本运算包括: abs/sqrt/div/exp/fmod/pow ,及一些三角函数 cos/ sin/ asin/ atan2/ cosh,及 ceil/round/floor/trunc 。

布尔运算包括: gt/lt/ge/le/eq/ne,topk, sort, max/min。

线性计算包括: trace, diag, mm/bmm,t,dot/cross,inverse,svd 等。

下面编程练习。

# 创建一个 2x4 的tensor
m = torch.Tensor([[2, 5, 3, 7],
                  [4, 2, 1, 9]])

print(m.size(0), m.size(1), m.size(), sep=' -- ')

​​# 返回 m 中元素的数量
print(m.numel())

# 返回 第0行,第2列的数
print(m[0][2])

# 返回 第1列的全部元素
print(m[:, 1])

# 返回 第0行的全部元素
print(m[0, :])

# Create tensor of numbers from 1 to 5
# 注意这里结果是1到4,没有5
v = torch.arange(1, 5)
print(v)

# Scalar product
m @ v

运行后发现数据类型不匹配。

根据google自带的智能chat提示更改数据类型。(这里不得不夸赞Google服务优秀的用户体验)

添加以下代码后成功。

v = v.float()  # Change the type of v to float

# Add a random tensor of size 2x4 to m
m + torch.rand(2, 4)

# 转置,由 2x4 变为 4x2
print(m.t())

# 使用 transpose 也可以达到相同的效果,具体使用方法可以百度
print(m.transpose(0, 1))

# returns a 1D tensor of steps equally spaced points between start=3, end=8 and steps=20
torch.linspace(3, 8, 20)

from matplotlib import pyplot as plt

# matlabplotlib 只能显示numpy类型的数据,下面展示了转换数据类型,然后显示
# 注意 randn 是生成均值为 0, 方差为 1 的随机数
# 下面是生成 1000 个随机数,并按照 100 个 bin 统计直方图
plt.hist(torch.randn(1000).numpy(), 100);

# 当数据非常非常多的时候,正态分布会体现的非常明显
plt.hist(torch.randn(10**6).numpy(), 100);

# 创建两个 1x4 的tensor
a = torch.Tensor([[1, 2, 3, 4]])
b = torch.Tensor([[5, 6, 7, 8]])

# 在 0 方向拼接 (即在 Y 方各上拼接), 会得到 2x4 的矩阵
print( torch.cat((a,b), 0))
# 在 1 方向拼接 (即在 X 方各上拼接), 会得到 1x8 的矩阵
print( torch.cat((a,b), 1))

本文主要参考中国海洋大学高峰老师深度学习课程:lab/week01_Pytorch_Basic.ipynb · Feng Gao (高峰)/OUC深度学习课程 - Gitee.com

其他参考链接:最全详细解读之什么是Pytorch?_pytorch是什么-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值