1.什么是Pytorch
提到深度学习,就不得不提一提如今主流的开发工具,Pytorch。PyTorch 是一个开源的深度学习框架,用于构建神经网络,将 Torch 的机器学习(ML) 库与基于 Python 的高级 API 相结合。它的灵活性和易用性以及其他优点使其成为学术和研究界领先的机器学习框架。它由 Facebook 的 AI 研究团队开发并维护,以灵活性和易用性著称,广泛用于学术研究和工业应用中。PyTorch 提供了强大的工具,允许开发者轻松构建、训练和部署深度学习模型。
2.使用Pytorch的优异性
PyTorch 支持 GPU 加速计算,能够显著提升深度学习模型的训练速度,尤其是在处理大规模数据时。同时,PyTorch 有活跃的社区和大量的开源资料,能够帮助开发者更快地上手并解决问题。
3.Pytorch与面向对象
-
误差传播灵活性: 使用类的写法,即面向对象编程,可以在方法中定义误差传播的逻辑。这使得模型在误差传播中进行灵活的操作,如在不同条件下选择不同的激活函数,或添加一些自定义的计算。
-
与PyTorch API的良好集成: PyTorch 的许多功能(如
torch.nn.Module
,torch.optim
等)都基于面向对象的设计。使用类的写法来继承开发者封装好的方法,可以更好地利用 PyTorch 提供的功能。 -
类的简单介绍
import winsound
from datetime import datetime as dt
#导入库
#在类当中,函数叫方法
class MyClock:
def __init__(self,name):#魔术方法
self.name=name
def beep(self):#函数(方法)
time=dt.now()
winsound.Beep(2000,1500)
print(f'{self.name}闹钟提醒您,现在的时间是:',time)
def __str__(self):#将我的对象返回为字符串而不是内存地址
return f"闹钟的名字:{self.name}"
clock1=MyClock('MyClock')#我的闹钟
clock1.beep()#调用对象执行方法
print(clock1)
以上我定义了一个类来简单代表闹钟这个产品。 我将报时和响铃这个功能写成方法让我的闹钟来执行,即面向对象。
4.torch的简单操作
torch的tensor(张量)与numpy库的ndarray操作近似,故经常一起使用。不同的是,ndarray不支持GPU,tensor支持GPU。
#--库的导入--
import torch
import numpy as np
首先,在进行Pytorch的基础操作之前,我们先需要对库进行导入。
my_array1=torch.empty(5,3)#创建5*3的张量
my_array2=torch.rand(5,3)#随机内容为0-1数的5*3张量
my_array3 = torch.ones(5, 3, dtype=torch.double)#内容为1的5*3张量
my_array4=torch.ones_like(my_array3,dtype=torch.float)#和my_array3大小一样的1张量
my_array5=torch.randn_like(my_array4,dtype=torch.float)#和my_array3大小一样的随机张量
my_array6=torch.tensor([5,3])#内容为5,3的一维张量
my_array7=torch.empty(5,3)
#赋值传播,将4,5张量相加得到7
torch.add(my_array4,my_array5,out=my_array7)
my_array8=my_array7.view(3,5)#和numpy的reshape方法相同
# print(torch.rand(1).item())#只有一个数的时候可以用item
my_array8.add_(1)#加法操作,也可以直接+1
之后就是张量的一些基础操作
# 检查GPU是否可用
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")#转到GPU上训练
print(f"Device: {torch.cuda.get_device_name()}")#打印设备名称
my_array9=torch.rand(100,100,device=device)
my_array9 = my_array9.cpu() # 将张量从 GPU 移动到 CPU,numpy不支持GPU
my_array10=np.stack([my_array9,my_array9],axis=0)#转成numpy的操作
对于张量的运算,我们还能转到GPU上,相对于CPU具有多线程,操作快的优点。