Sora模型已经诞生了,你还不会PyTorch吗?抓紧时间上车,驶入机器学习的快车道






Sora模型已经诞生了,你还不会PyTorch吗?抓紧时间上车,驶入机器学习的快车道

小果  生信果  2024-03-13 19:00:44

收录于话题

#机器学习

前言
哈喽,大家好,小果今天给大家介绍的是机器学习深受欢迎的主流框架——PyTorch,它是
是Torch的Python版本,是由Facebook开源框架。最近,Sora模型的诞生引起全球高度关注,它通过文本生成视频模拟世界的能力令人折服,虽然目前尚未开源,但已经有不少人尝试复现并开源项目,比如OpenDiT和Latte,它们正是通过PyTorch框架完成的。PyTorch深受欢迎的原因有很多:它语法简单易上手,适合机器学习初学者;它兼容性好,与TensorFlow机器学习框架环境配置不兼容形成鲜明对比;它的API设计灵活卓越,不需要像TensorFlow 需要通过多次切换 API;它易于迁移,支持在CPU和GPU上进行训练和预测,可以轻松地迁移到不同的平台上……在机器学习领域,Pytorch将许多数学函数和神经网络结构进行封装,你无需因为数学不好而止步不前。可以说,只要你熟练驾驭了PyTorch,就相当于驶入了机器学习的快车道。
本次介绍的机器学习工具包操作比较占用内存,而机器学习领域的数据集通常非常庞大,对有意研究机器学习的小伙伴来说,推荐使用服务器,欢迎联系小果租赁性价比居高的服务器哦!



公众号后台回复“111”

领取本篇代码、基因集或示例数据等文件

文件编号:240312

需要租赁服务器的小伙伴可以扫码添加小果,此外小果还提供生信分析,思路设计,文献复现等,有需要的小伙伴欢迎来撩~

 

正文
数据统计
最近,小果找到了2019-2022年的机器学习主流框架的统计数据,发现Pytorch的使用位居榜首,近年来的趋势仍在不断上升。
2019年,Horace He对机器学习两大框架PyTorch和TensorFlow在学术界的使用情况进行数据统计。结果表明,自2019年起,PyTorch的论文数量激增,几乎在顶会甩开TensorFlow一大截!   
2021年,Eniola Olaleye统计了16个平台的竞赛数据。根据调查,冠军中有近八成使用的机器学习框架是PyTorch,只有超过两成的人使用TensorFlow,这说明了PyTorch的受众度确实远高于TensorFlow。
2023年,机器学习平台ML Contests统计了2022年的竞赛数据,发现Python是冠军的首选语言,占比超过九成,其中PyTorch的比例从2020到2022年稳定增长,在后两年显著上升:使用PyTorch的比例从近八成增加到超过九成了,而TensorFlow只剩不到一成,这再次证明PyTorch在机器学习的主导地位不可撼动。   
看到这里,不用小果说,你也心里清楚机器学习应该用哪个框架了吧~
快速入门
下面小果要教你们动手实操了哦~    
张量是机器学习基本的数据结构,因此首先要学会操作张量。
小果导入了机器学习框架torch和科学计算库numpy,使用tensor函数创建一阶张量,参数dtype可以指定torch数据类型,使用size方法获取该张量的阶对应的维度。
import torch#导入机器学习框架import numpy as np#导入科学计算库           t0=torch.tensor([1,2,3],dtype=torch.int8)#可选int16,int32,int64,float32,float16,float64print(t0)#输出:tensor([1, 2, 3], dtype=torch.int8)print(t0.size())#输出:torch.Size([3])
小果使用arange函数生成包含连续整数的数组,通过reshape方法修改形状,使用tensor函数转化为torch数据类型,并保存到变量t1,通过size方法观察输出不难发现torch的阶数是由外向内算起,每一阶的维度就是从该阶的方向上看的一组元素的数量,是不是有点难理解?小果画个图给你看看,你就明白了。
array1=np.arange(12).reshape(4,3)#arange生成连续整数的numpy.ndarray,reshape修改形状print(array1)'''输出:    [[ 0   1   2]     [ 3   4   5]     [ 6   7   8]     [ 9   10  11]]'''t1=torch.tensor(array1,dtype=torch.float64)print(t1)'''输出:tensor([[ 0.,   1.,   2.],                  [ 3.,   4.,   5.],              [ 6.,   7.,   8.],              [ 9.,   10.,  11.]], dtype=torch.float64)'''print(t1.size())#输出:torch.Size([4, 3])
小果用蓝色箭头代表一阶方向,红色箭头代表二级方向,蓝色边框代表的是一阶的每一组元素,红色边框代表的是一阶的每一组元素。显然一阶的每一组元素的数量为3,二阶的每一组元素的数量为4,故一阶的维度是4,二阶的维度是3,你明白了吗?
对二阶张量来说,有两种方法实现转置,一种是通过transpose指定两个阶数的下标进行交换,注意阶数的下标从0开始算起,另一种是通过T方法实现,不需要输入参数。
print(t1.transpose(1,0))#等价T'''输出:tensor([[ 0.,  3.,  6.,  9.],              [ 1.,  4.,  7., 10.],              [ 2.,  5.,  8., 11.]], dtype=torch.float64)'''
实际上,创建张量的方式不只用tensor函数,还有很多种,小果给你列举一些~
empty函数能创建无用数据填充的张量,ones函数能创建数据均为1的张量,zeros函数能创建数据均为0的张量,rand函数能生成数据为[0,1)随机值的张量,randn函数能生成均值为0、方差为1的数据的张量,randint函数能生成数据为[low,high)随机整数的张量。如果你熟悉Numpy,你会发现PyTorch这些函数基本能在Numpy中找到对应的函数    
print(torch.empty(2,2))#空数组,使用无用数据填充'''输出(不唯一):tensor([[-7.6103e+30,  1.5204e-42],                        [ 0.0000e+00,  0.0000e+00]])'''print(torch.ones(2,3))#生成数据均为1的张量'''输出:tensor([[1., 1., 1.],              [1., 1., 1.]])'''print(torch.zeros(2,1))#生成数据均为0的张量#输出:tensor([[0.],#             [0.]])print(torch.rand(1,4))#随机值区间为[0,1)#输出(不唯一):tensor([[0.3295, 0.8059, 0.1125, 0.3575]])print(torch.randn(1,4))#随机值的分布式均值为0,方差为1#输出(不唯一):tensor([[-0.7469,  1.1632,  0.7925,  0.3307]])print(torch.randint(low=0,high=3,size=[3,2]))#整型数组'''输出(不唯一):tensor([[2, 2],                        [0, 1],                        [0, 0]])'''
接下来,小果讲讲三阶张量的基本操作,可能有点难理解,大家做好心理准备~
小果先用arange函数创建数据为0-23的一阶张量,再通过reshape方法转化为三阶张量,    
该方法的参数的数量反映的是张量的阶数,参数的数值反映的是张量的维度,对阶数和维度有困惑的小伙伴可以再看看前面的讲解。小果提醒一下,reshape方法的参数的乘积必须等于张量的元素的数目。
t2=torch.arange(24,dtype=torch.float)print(t2)#输出:tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,#             18, 19, 20, 21, 22, 23])t2=t2.reshape(2,3,4)#和resize(2,3,4)相同,但过时print(t2)'''输出:tensor([[[ 0,  1,  2,  3],               [ 4,  5,  6,  7],               [ 8,  9, 10, 11]],                          [[12, 13, 14, 15],                [16, 17, 18, 19],                [20, 21, 22, 23]]])'''
view方法和reshape方法基本相同,都可以改变张量的形状,不同之处在于它的参数的数值可以填-1,这表示这一阶的维度由程序自动计算,非-1则表示这一阶的维度,这一点上view方法比reshape方法更方便,所以小果更推荐你们用view改变张量形状喔~
print(t2.view(-1))'''输出:tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,                18, 19, 20, 21, 22, 23])'''print(t2.view(3,-1))'''输出:tensor([[ 0, 1, 2, 3, 4, 5, 6, 7],              [ 8, 9, 10, 11, 12, 13, 14, 15],              [16, 17, 18, 19, 20, 21, 22, 23]])'''print(t2.view(-1,2,4))'''输出:tensor([[[ 0,  1,  2,  3],               [ 4,  5,  6,  7]],                             [[ 8,  9, 10, 11],               [12, 13, 14, 15]],                         [[16, 17, 18, 19],               [20, 21, 22, 23]]])'''
你知道吗?张量的结构变化不仅可以通过形状变化,也可以通过维度交换改变。维度交换可以简单理解为张量的所有元素的不同的坐标方向上的整体变化,它通过transpose和permute方法实现。小果举个例子,我们假设它张量t2中的元素7的坐标是(1,2,3),如果张量的第一维和第二维交换。它的坐标便是(2,1,3)。transpose方法只能交换张量的两个维度,输入参数是两个的维度下标,比如输入参数是0和1,就会交换第一维和第二维,对t2而言,张量的结构会从2*3*4转化为3*2*4;permute方法能交换张量的多个维度,输入参数也是维度下标,但其数量必须与张量的阶数相同,比如输入参数是2、0和1,维度之间的位置发生交换,第一维来到第二维,第二维来到第三维,第三维来到第一维,对t2而言,张量的结构会从2*3*4转化为4*2*3。
print(t2.transpose(0,1))#两个参数,第1维和第2维交换 2*3*4->3*2*4# '''输出:tensor([[[ 0.,  1.,  2.,  3.],#               [12., 13., 14., 15.]],# #              [[ 4.,  5.,  6.,  7.],#               [16., 17., 18., 19.]],# #              [[ 8.,  9., 10., 11.],#               [20., 21., 22., 23.]]])# '''print(t2.permute(2,0,1))#三个参数,维度交换 2*3*4->4*2*3'''输出:tensor([[[ 0.,  4.,  8.],               [12., 16., 20.]],                         [[ 1.,  5.,  9.],                   [13., 17., 21.]],                         [[ 2.,  6., 10.],               [14., 18., 22.]],                         [[ 3.,  7., 11.],               [15., 19., 23.]]])'''
是不是CPU烧坏了?没关系,喝口水缓一下~小果再补充几个张量的基本操作,通过min和max方法分别可以得到张量元素中的最小值和最大值,通过mean和std方法分别可以计算张量元素中的均值和方差,注意mean方法对浮点型张量才有效。
print(t2.min(),t2.max())#输出:tensor(0.) tensor(23.)print(t2.mean(),t2.std())#均值(只有数据不是整数型才能计算)、方差#输出:tensor(11.5000) tensor(7.0711)
这次内容有些多,大家好好消化下。当然,想真正学好机器学习,光掌握PyTorch是不够的,需要了解统计学和线性代数的基础知识,这样才能更加得心应手。
如果各位小伙伴们觉得自己运行机器学习的代码太麻烦,那就快来使用我们的云生信小工具吧,你可以找到你想要的机器学习算法,非常方便,记住!要使用我们的云生信链呀!
附上链接:http://www.biocloudservice.com/home.html
   

小果还提供思路设计、定制生信分析、文献思路复现;有需要的小伙伴欢迎直接扫码咨询小果,竭诚为您的科研助力!


定制生信分析

服务器租赁

扫码咨询小果


往期回顾

01

1024G存储的生信服务器,两人成团,1人免单!

02

单个数据库用腻了?多数据库“组合拳”带你打开免疫浸润新思路!

03

孟德尔随机化的准备工作,GWAS数据的网站下载方法

04

跟着小果学复现-手把手带你拿下IF=46.9Nature 级别的主成分分析(PCA)图!!