deep learning

谷歌在线notebook

一、基本数据类型与用法

1.torch.tensor(张量)

按照维度不同(中括号的对数),可以用torch.tensor创建scalar(标量)、vector(向量)、matrix(矩阵),

一般的,一维是标量,二维是向量,三维是矩阵,n维是张量(包含1~3维)

# code:

scalar = torch.tensor(7)

vector = torch.tensor([3, 4])

matrix = torch.tensor([[1, 2],

[3, 4]])

print(scalar.ndim)

print(vector.ndim)

print(matrix.ndim)

print(scalar.shape)

print(vector.shape)

print(matrix.shape)

# out:

0

1

2

torch.Size([])

torch.Size([2])

torch.Size([2, 2])

2.random_tensor(随机张量)

随机张量在深度学习中经常使用,在为每个神经网络进行初始化赋值时,就是用随机张量矩阵为每个节点赋予一个初始值,用法为torch.rand,参数为张量矩阵形状,生成结果为一个随机数组成的张量矩阵。

# code:

random_tensor = torch.rand(3,4)

random_tensor

# out:

复制代码
tensor([[0.3376, 0.6243, 0.1119, 0.2120],
        [0.5750, 0.4984, 0.5371, 0.4670],
        [0.0507, 0.3727, 0.0362, 0.0290]])

3.torch.ones和torch.zeros

这两个方法分别用来创建内容全为1或全为0的张量矩阵,用法同rand类似。

# code:

zeros = torch.zeros(3,4)

zeros

# out:

复制代码
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])

# code:

zeros = torch.ones(3,4)

zeros

# out:

复制代码
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])

4.常用tensor属性

shape表示矩阵形状,ndim表示张量维度(中括号对数),dtype表示张量数据类型(默认为float32),其中shape属性获取结果与zeros.size()方法获取结果相同。

# code:

zeros = torch.ones(3,4)

print(zeros.shape)

print(zeros.ndim)

print(zeros.dtype)

# out:

torch.Size([3, 4])

2

torch.float32

dtype可以在创建张量时指定,如tensor=torch.tensor([1,2,3],dtype=float16),它们指定了计算的精度;dtype常用类型包括float32(单精度)、float16(半精度)、float64(双精度)。 若要更改dtype,可以调用to()方法进行修改

device属性在创建张量时默认为cpu,若要采用gpu加速,将其设置为cuda。

tensor = torch.tensor([1,2,3], dtype=float64, device='cuda')

tensor.to(torch.float16)

5.torch.arange

创建一个从指定位置出发,到指定范围结束的张量,可以设置间隔。

# code:

rangeTensor = torch.arange(1, 20, 4)

rangeTensor

# out:

复制代码
tensor([ 1,  5,  9, 13, 17])

6.torch.zeros_like与torch.ones_like

创建与指定张量相同形状的张量,内容分别为0和1,结果的dtype为int64

# code:

rangeTensor = torch.tensor([[1,2,3],

[4,5,6]])

tensorLike = torch.ones_like(rangeTensor)

tensorLike

# out:

复制代码
tensor([[1, 1, 1],
        [1, 1, 1]])

# code:

rangeTensor = torch.tensor([[1,2,3],

[4,5,6]])

tensorLike = torch.zeros_like(rangeTensor)

tensorLike

# out:

复制代码
tensor([[0, 0, 0],
        [0, 0, 0]])

7.张量与常数的运算

张量与常数的运算遵循广播机制,即张量会对所有元素进行相应运算。

运算有两种方式,一种是直接用python运算符,另一种是用torch提供的方法执行,但一般推荐直接使用运算符,因为二者结果相同,运算符操作更为直观。

# code:

tensor = torch.tensor([4,6,8])

print(tensor+3)

print(tensor*3)

print(torch.add(tensor, 3))

print(torch.mul(tensor, 3))

# out:

tensor([ 7, 9, 11])

tensor([12, 18, 24])

tensor([ 7, 9, 11])

tensor([12, 18, 24])

8.张量与张量的运算

①矩阵元素运算

矩阵的加减乘除需要满足两矩阵形状相同,加减时对应位置元素相加减乘除。

# code:

tensor1 = torch.tensor([4,6,8])

tensor2 = torch.tensor([2,4,7])

tensor1 + tensor2

# out:

复制代码
tensor([ 6, 10, 15])

②矩阵乘法

矩阵乘法又被称为"点积",和矩阵元素相乘不同,其运算过程如下图:

# code:

tensor1 = torch.tensor([[1, 2, 3],

[4, 5, 6]])

tensor2 = torch.tensor([[1, 4, 7],

[2, 5, 8],

[2, 3, 4]])

torch.matmul(tensor1, tensor2)

# out:

复制代码
tensor([[11, 23, 35],
        [26, 59, 92]])

需要注意的一点是不是任何矩阵都能直接相乘,前提条件是第一个矩阵的列数要等于第二个矩阵的行数,如(2, 3)的矩阵可与(3, 1)的矩阵进行点积运算。

事实上,使用tensor运算就是因为矩阵相乘在计算机上的运算效率要高于循环运算数千倍,正因如此,也造就了当今各大框架都以tensor为基本运算单元的现状。 以下是一段速度对比代码:

# code:

import torch

import time

import numpy as np

定义矩阵大小

matrix_size = 100

生成两个随机矩阵

tensor1 = torch.rand(matrix_size, matrix_size)

tensor2 = torch.rand(matrix_size, matrix_size)

使用张量的点积运算

start_time = time.time()

result_tensor = torch.matmul(tensor1, tensor2)

end_time = time.time()

tensor_time = end_time - start_time

使用传统的循环运算计算点积

start_time = time.time()

result_loop = torch.zeros((matrix_size, matrix_size))

for i in range(matrix_size):

for j in range(matrix_size):

result_loop[i, j] = sum(tensor1[i, :] * tensor2[:, j])

end_time = time.time()

loop_time = end_time - start_time

输出执行时间

print("张量点积运算时间:", tensor_time)

print("传统循环运算时间:", loop_time)

out:

张量点积运算时间: 0.0005884170532226562

传统循环运算时间: 5.478101968765259

剩余部分正在学习中......

相关推荐
没有余地 EliasJie19 分钟前
Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT
pytorch·windows·深度学习·ubuntu·pycharm·conda·tensorflow
技术无疆34 分钟前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
xuehaishijue43 分钟前
红外画面空中目标检测系统源码分享
人工智能·目标检测·计算机视觉
羊小猪~~43 分钟前
机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
人工智能·python·机器学习·数据挖掘·数据分析·回归·时序数据库
浊酒南街1 小时前
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.7-2.8
人工智能·深度学习·神经网络
DuoRuaiMiFa1 小时前
ChatGPT全新功能Canvas上线:开启智能编程与写作新篇章
人工智能·chatgpt
DisonTangor1 小时前
Windows 11将新增基于AI的搜索、生成式填充和其它AI功能
人工智能
soso19682 小时前
【AI自然语言处理应用】通过API调用通义晓蜜CCAI-对话分析AIO应用
人工智能·自然语言·ccai
网安-搬运工2 小时前
RAG再总结之如何使大模型更好使用外部数据:四个不同层级及查询-文档对齐策略
人工智能·自然语言处理·大模型·llm·大语言模型·ai大模型·rag