Pytorch学习手札(一)---安装、数据类型、张量

1.安装

安装cuda
安装pytorch

具体参考Pytorch快速安装与环境配置

2.PyTorch基本数据类型

python           Pytorch
int,             intTensor
float,           Float tensor
int array,       IntTensor of size [d1,d2...]
flaot array      FloatTensor of size[d1,d2,...]

3.数据类型1

对于pytorch,并不能表示string类型的数据类型,一般情况下,可以将其数据分类的string结果进行编码表示, 将其编码为一个向量的数据类型[d1,d2…dn],这个方法将其称为One-hot的编码表示方法。
其中,n为数据分类结果的类别数目,即表示向量的总长度。
例如:对于数据进行分类的时候,其实现的功能是区分猫和狗,一共含有两个数据分类结果,因此可以将其结果的类别进行编码表示为[0,1]猫和[1,0]狗

4. 数据类型2

对于pytorch里面的数据进行数据类型判断和输出时,一般有三种方法:
(1)print(a.type):输出数据a的详细数据类型;
(2)print(type(a)):输出数据a的基本数据类型,没有(1)中那么详尽;
(3)print(isinstance(a,torch.FloatTensor)):用来输出数据a是否为torch.Tensor数据类型,即返回值为True或者False.

5.张量的定义

对于pytorch里面的标量数据a,进行相关的数据定义时,一般将其定义为torch.tensor(a),则输出时返回为tensor(a)

6.张量的形状大小

对于标量的数据类型,其数据shape输出一般为a.shape=tensor.size([]),对于其长度输出len(a.shape)=0,另外,对于a.size也是等于tensor.size([])的。

7.DIM和size

对于pytorch里面的任何一个张量数据torch.tensor([d1,d2,d3,d4])DIM和size以及shape三种数据属性的含义解析与区分如下:
DIM是指张量数据的长度(即数据的层数)=len(a.shape),size和shape都是指张量数据的形状;
另外,a.numel()是指数据的大小为d1d2d3*d4
(1)DIM=2:
a=torch.tensor([4,784])
其中4是指数据图片的数目,而784是指每一张图片的特征维度
举例:对于a=torch.tensor([1,2,3])
适用于普通的机器学习数据
(2)DIM=3:
1)a.size/shape=tensor.size([1,2,3])
2)a.size(0)=1
3)a.shape[2]=3
4)a[0].shape=[2,3]
适用于RNN神经网络的数据类型[length,num,feature]
例如,对于RNN神经网络进行语音识别与处理时[10,20,100]表示:每个单词包含100个特征,一句话一共有10个单词,而每次输20句话
(3)DIM=4:
一般适用于CNN卷积神经网络[b,c,h,w]:图像处理中图片的信息
torch.tensor([2,3,28,28]):
1)2是指每次输入的图片的个数
2)3是指每张图片的基本特征通道类型
3)28,28是指每张图片的像素特征:长和宽

8.张量的创建

创建Tensor数据的方法主要有以下几种:
(1)Import from numpy:
a=np.array([1.1,2.1)
b=torch.from_numpy(a)
a=np.ones([2,3]) #定义矩阵的方式
b=torch.from_numpy(a)
注:从numpy中导入的数据float类型其实是double类型的。
(2)Import from List:
a=torch.tensor([[1.1,2.1],[1.5,1.2]]),这里的小写tensor中的list数据就是指data本身数据
b=torch.FloatTensor/Tensor(d1,d2,d3),这里的大写Tensor中为数据的shape,即数据的维度组成

9.张量的初始化

生成未初始化的数据uninitialized:
(1)torch.empty()
(2)torch.FloatTensor(d1,d2,d3)
(3)torch.IntTensor(d1,d2,d3)

9.1 设置默认的类型

torch.set_default_tensor_type(torch.DoubleTensor)

10.随机初始化

tensor数据的随机初始化的方式—rand/rand_like(0-1),randint(整数数据类型),randn(正态分布数据):
(1)torch.rand():产生0-1之间的数据
(2)torch.rand_like(a):a为一个tensor数据类型,产生一个和a数据shape相同的随机tensor数据类型
(3)torch.randint(min,max,[d1,d2,d3]):产生一个shape类型为[d1,d2,d3]的tensor数据,数据最小和最大分别为min和max
(4)torch.randn:产生一个正态分布的数据类型N(0,1),对于自定义的正态分布的数据N(mean,std),一般需要用到torch.normal()函数,一般需要两步步骤进行,其具体的用法如下举例所示:
a=torch.normal(mean=torch.full([10],0),std=torch.arange(1,0,-0.1))
b=a.reshape(2,5)

11.生成一个全部填充相同的数据

torch.full([d1,d2,de3],a)其中填充数据为a

12.递增或者递减

函数API:arange/range
torch.arange(min,max,distance):左闭右开区间,不包含最大值
torch。range(min,max,distance):全闭区间,包含最大值,不推荐使用

13.linspace/logspace:线性空间

(1)torch.linspace(min,max,steps=data number):返回的是等间距的数据,其中左右数据均包括,数据个数为steps,数据间隔为(max-min)/(steps-1)
(2)torch.logspace(min,max,steps=data number):返回的是10的各个线性空间次方的数值

14、torch中一些零、一和单位张量数据生成API

torch.zeros(3,4) #零张量数据
torch.ones(3,4) #1张量数据
torch.eye(4,5) #单位张量数据

15.randperm:主要是产生随机的索引值

torch.randperm(10):在[0,10),即0-9产生随机的10个索引

16.本节代码汇总

# -*- coding: utf-8 -*-
'''
@Author: Jason
@Desc  : Pytorch 张量学习
'''
import torch
import numpy as np
#1张量的创建
#1.1从numpy数据转变
npData1 = np.array([1,2])
data1 = torch.from_numpy(npData1)
# print(data1) #tensor([1, 2], dtype=torch.int32)
npData2 = np.ones([2,3]) #注意这里是创建爱你2行3列元素为1 的矩阵
data2 = torch.from_numpy(npData2)
# print(data2)
'''
tensor([[1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
'''
#1.2 从list中导入
listData1 = [1,2]
# print(torch.tensor(listData1))#tensor([1, 2])
# print(torch.FloatTensor([1.,2.3]))#tensor([1.0000, 2.3000])


#1.3 未初始化张量
data3 = torch.empty(1)
# print(data3,data3.type()) #tensor([3.5733e-43]) torch.FloatTensor
data4 = torch.FloatTensor(2,3)#2行3列 数据大小悬殊
# print(data4)
'''
tensor([3.5733e-43]) torch.FloatTensor
tensor([[-1.4225e+27,  4.1198e-43,  1.7796e-43],
        [ 0.0000e+00,  0.0000e+00,  0.0000e+00]])
'''
# 1.4 修改默认张量类型
#上面data3 是torch.FloatTensor,现在将默认类型改为DoubleTensor
torch.set_default_tensor_type(torch.DoubleTensor)
# print(torch.empty(1),torch.empty(1).type()) #tensor([4.9407e-324]) torch.DoubleTensor

# 1.5 随机初始化
data5 = torch.rand(3,4)# torch.rand(m,n) 生成m行n列的0-1之间的张量
# print(data5)
'''
tensor([[0.9729, 0.6026, 0.4288, 0.3520],
        [0.7018, 0.4884, 0.7247, 0.6212],
        [0.0974, 0.7153, 0.4548, 0.4730]])
'''
#1.6 产生一个类似data5的张量(shape相同,值不同)
data6 = torch.rand_like(data5)#
# print(data6)
'''
tensor([[0.1862, 0.5182, 0.9033, 0.9588],
        [0.0946, 0.5798, 0.4647, 0.1398],
        [0.4490, 0.7391, 0.6581, 0.5851]])
'''
#torch.randint(min,max,[d1,d2,d3]) [min,max]区间,维度
data7 = torch.randint(1,10,[2,3])#
# print(data7)
'''
tensor([[6, 7, 7],
        [5, 6, 1]])
'''
#服从正太分布(0,1)
data8 = torch.randn(3,3)
# print(data8)
'''
tensor([[-1.4928,  0.2712,  1.3751],
        [-1.2528,  1.3756,  1.0473],
        [ 0.8514,  0.6558,  0.2690]])
'''
data9 = torch.normal(mean=torch.full([10],0),std=torch.arange(1,0,-0.1))#长度为10全为0==>[1,0.9,0.8,...0.1]
# print(data9)
'''
tensor([ 0.4317, -0.1543, -0.4910,  0.0124,  1.0574,  0.0117,  0.7898, -0.6395,
         0.2374, -0.1907])
'''

#1.7 生成相同数据
data10 = torch.full([2,3],9)
print(data10)
'''
tensor([[9., 9., 9.],
        [9., 9., 9.]])
'''
if __name__ == "__main__":
    print(" ")

转载请标明转自:https://leejason.blog.csdn.net/article/details/106865563

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章