PyTorch最近几年可谓大火。相比于TensorFlow,PyTorch对于Python初学者更为友好,更易上手。
众所周知,numpy作为Python中数据分析的专业第三方库,比Python自带的Math库速度更快。同样的,在PyTorch中,有一个类似于numpy的库,称为Tensor。Tensor自称为神经网络界的numpy。
一、numpy和Tensor二者对比
对比项 numpy Tensor 相同点 可以定义多维数组,进行切片、改变维度、数学运算等 可以定义多维数组,进行切片、改变维度、数学运算等 不同点
1、产生的数组类型为numpy.ndarray;
2、会将ndarray放入CPU中进行运算;
3、导入方式为import numpy as np,后续通过np.array([1,2])建立数组;
4、numpy中没有x.type()的用法,只能使用type(x)。
1、产生的数组类型为torch.Tensor;
2、会将tensor放入GPU中进行加速运算(如果有GPU);
3、导入方式为import torch,后续通过torch.tensor([1,2])或torch.Tensor([1,2])建立数组;
4、Tensor中查看数组类型既可以使用type(x),也可以使用x.type()。但是更加推荐采用x.type(),具体原因详见下文。
举例(以下代码均在Jupyter Notebook上运行且通过):
numpy:
import numpy as np x = np.array([1,2]) #之所以这么写,是为了告诉大家,在Jupyter Notebook中,是否带有print()函数打印出来的效果是不一样的~ x #array([1, 2]) print(x) #[1 2] type(x) #numpy.ndarray print(type(x)) #<class 'numpy.ndarray'> #注意:numpy中没有x.type()的用法,只能使用type(x)!!!
Tensor:
import torch #注意,这里是import torch,不是import Tensor!!! x = torch.tensor([1,2]) x #tensor([1, 2]) print(x) #tensor([1, 2]),注意,这里与numpy就不一样了! type(x) #torch.Tensor print(type(x)) #<class 'torch.Tensor'> x.type() #'torch.LongTensor',注意:numpy中不可以这么写,会报错!!! print(x.type()) #torch.LongTensor,注意:numpy中不可以这么写,会报错!!!
numpy与Tensor在使用上还有其他差别。由于不是本文的重点,故暂不详述。后续可能会更新~
二、torch.tensor与torch.Tensor的区别
细心的读者可能注意到了,通过Tensor建立数组有torch.tensor([1,2])或torch.Tensor([1,2])两种方式。那么,这两种方式有什么区别呢?
(1)torch.tensor是从数据中推断数据类型,而torch.Tensor是torch.empty(会随机产生垃圾数组,详见实例)和torch.tensor之间的一种混合。但是,当传入数据时,torch.Tensor使用全局默认dtype(FloatTensor);
(2)torch.tensor(1)返回一个固定值1,而torch.Tensor(1)返回一个大小为1的张量,它是初始化的随机值。
import torch #注意,这里是import torch,不是import Tensor!!! x = torch.tensor([1,2]) x #tensor([1, 2]) print(x) #tensor([1, 2]),注意,这里与numpy就不一样了! type(x) #torch.Tensor print(type(x)) #<class 'torch.Tensor'> x.type() #'torch.LongTensor',注意:numpy中不可以这么写,会报错!!! print(x.type()) #torch.LongTensor,注意:numpy中不可以这么写,会报错!!! y = torch.Tensor([1,2]) y #tensor([1., 2.]),因为torch.Tensor使用全局默认dtype(FloatTensor) print(y) #tensor([1., 2.]),因为torch.Tensor使用全局默认dtype(FloatTensor) type(y) #torch.Tensor print(type(y)) #<class 'torch.Tensor'> y.type() #'torch.FloatTensor',注意:这里就与上面不一样了!tensor->LongTensor,Tensor->FloatTensor!!! print(y.type()) #torch.FloatTensor,注意:这里就与上面不一样了!tensor->LongTensor,Tensor->FloatTensor!!! z = torch.empty([1,2]) z #随机运行两次,结果不同:tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]]) print(z) #随机运行两次,结果不同:tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]]) type(z) #torch.Tensor print(type(z)) #<class 'torch.Tensor'> z.type() #'torch.FloatTensor',注意:empty()默认为torch.FloatTensor而不是torch.LongTensor print(z.type()) #torch.FloatTensor,注意:empty()默认为torch.FloatTensor而不是torch.LongTensor #torch.tensor(1)、torch.Tensor(1)和torch.empty(1)的对比: t1 = torch.tensor(1) t2 = torch.Tensor(1) t3 = torch.empty(1) t1 #tensor(1) print(t1) #tensor(1) type(t1) #torch.Tensor print(type(t1)) #<class 'torch.Tensor'> t1.type() #'torch.LongTenso' print(t1.type()) #torch.LongTensor t2 #随机运行两次,结果不同:tensor([2.8026e-45]),tensor([0.]) print(t2) #随机运行两次,结果不同:tensor([2.8026e-45]),tensor([0.]) type(t2) #torch.Tensor print(type(t2)) #<class 'torch.Tensor'> t2.type() #'torch.FloatTensor' print(t2.type()) #torch.FloatTensor t3 #随机运行两次,结果不同:tensor([0.]),tensor([1.4013e-45]) print(t3) #随机运行两次,结果不同:tensor([0.]),tensor([1.4013e-45]) type(t3) #torch.Tensor print(type(t3)) #<class 'torch.Tensor'> t3.type() #'torch.FloatTensor' print(t3.type()) #torch.FloatTensor
上文提到过,对于Tensor,更推荐采用x.type()来查看数据类型。是因为x.type()的输出结果为'torch.LongTensor'或'torch.FloatTensor',可以看出两个数组的种类区别。而采用type(x),则清一色的输出结果都是torch.Tensor,无法体现类型区别。
PyTorch是个神奇的工具,其中的Tensor用法要远比numpy丰富。大家可以在练习中多多总结,逐渐提高~
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]