神经网络系列(2)——了解张量

了解张量

张量类似于Numpy的数组,可以在GPU上使用,并能改善性能

1、标量 (0维张量)

包含一个元素的张量称为标量。标量的类型通常是FloatTensor或LongTensor。如下:

import torch
x = torch.rand(6)
x.size()   
print(type(x.size(0)))
# 输出:torch.Size([6])
# <class 'int'>

2、向量(一维张量)

他是一个元素序列的数组
例如:存储一周的最高气温

temp_max = torch.FloatTensor([23.6,25.9,29.3,30.1,31.4,30.8,29.5])
print(temp_max.size())
print(type(temp_max))
'''
torch.Size([7])
<class 'torch.Tensor'>
'''

3、矩阵(二维张量)

把csv文件打开为numpy数组,用torch提供的函数from_numpy将数组转换为torch张量,输出的张量形状为506行*14列的矩阵

import numpy as np

np1 = np.loadtxt('housing.csv')
boston_tensor = torch.from_numpy((np1))
print(boston_tensor.size())
# torch.Size([506, 14])

获取前两份内容并打印:

print(boston_tensor[:2])
'''
tensor([[6.3200e-03, 1.8000e+01, 2.3100e+00, 0.0000e+00, 5.3800e-01, 6.5750e+00,
         6.5200e+01, 4.0900e+00, 1.0000e+00, 2.9600e+02, 1.5300e+01, 3.9690e+02,
         4.9800e+00, 2.4000e+01],
        [2.7310e-02, 0.0000e+00, 7.0700e+00, 0.0000e+00, 4.6900e-01, 6.4210e+00,
         7.8900e+01, 4.9671e+00, 2.0000e+00, 2.4200e+02, 1.7800e+01, 3.9690e+02,
         9.1400e+00, 2.1600e+01]], dtype=torch.float64)
'''

4、3维张量
把几个矩阵累加到一起,就得到了一个三维张量。举个例子,就是图片。
一般进行图像分类的图片,我们会将它处理成(224,224,3)张量,这三个(RGB)依次表示:高度,宽度,通道数。

from PIL import Image

pic = np.array(Image.open('pic.jpg').resize((224,224)))
pic_tensor = torch.tensor(pic)
print(pic_tensor.size())
plt.imshow(pic_tensor)
plt.show()

在这里插入图片描述

5、切片张量
张量的一个常见操作就是切片,以前面所写的最高温度为例:

temp_max[:5]  # tensor([23.6000, 25.9000, 29.3000, 30.1000, 31.4000])

还可以做一些有趣的事,比如裁剪出图片中的面部

plt.imshow(pic_tensor[25:100,100:150,].numpy())

在这里插入图片描述

6、四维张量
常见的类型是用于批处理图像,由于GPU内存的限制,一般常用的批处理尺寸是16,32,64.

7、五维张量
使用到五维张量的例子可能就是视频数据了,视频可以划分为帧,比如一个一分钟的短视频,假设包含的帧数为60,那么,这个视频表示的形状可能就是(1,60,224,224,3)的张量。

8、GPU上的张量
进行一些张量计算,同时可以体现出CPU和GPU之间的性能

a = torch.rand(10000,10000)
b = torch.rand(10000,10000)
start = time.time()
a.matmul(b)
end = time.time()
print('a*b耗时:',end - start)  # a*b耗时: 10.270581245422363
a = torch.rand(10000,10000)
b = torch.rand(10000,10000)
a = a.cuda()
b = b.cuda()
start = time.time()
a.matmul(b)
end = time.time()
print('a*b耗时:',end - start)  # a*b耗时: 0.6859965324401855

可以直观的看出两者之间的算力差距

文中用到的housing.csv;pic.jpg,会上传到我的资源中,有需要可以下载操作。其实也没那么需要,大家改成自己想操作的文件就可以。

以上。

PyTorch中的张量是构建神经网络的基本组件之一。可以使用torch.Tensor类或torch.tensor函数来创建张量。torch.Tensor是Python的一个类,是torch.FloatTensor()的别名,表示默认的张量类型。而torch.tensor是一个函数,根据原始数据类型自动选择相应类型的张量,而不仅仅是单精度浮点型张量。使用这两种方法可以创建不同种类的张量。具体而言,可以使用torch.zeros函数创建一个大小为指定尺寸的零张量。该函数的参数包括size、dtype、layout、device和requires_grad等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PyTorch深度学习实战(3)——使用PyTorch构建神经网络](https://blog.csdn.net/LOVEmy134611/article/details/130875404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PyTorch张量](https://blog.csdn.net/qq_53706090/article/details/128352255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值