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_loopi, j = sum(tensor1i, : * tensor2:, j)

end_time = time.time()

loop_time = end_time - start_time

输出执行时间

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

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

out:

张量点积运算时间: 0.0005884170532226562

传统循环运算时间: 5.478101968765259

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

相关推荐
阳明山水2 分钟前
自下而上 vs 自上而下 vs 最优组合预测策略解析
大数据·人工智能·深度学习·算法·机器学习
FPC_小西7 分钟前
LDO 低压差线性稳压器 拆解电源稳压核心原理
人工智能·单片机·嵌入式硬件·集成学习·pcb工艺·hdi高密度互联
长空任鸟飞_阿康14 分钟前
RAG 文档摄入全链路,从原理到生产落地
vue.js·人工智能·python
硅谷秋水17 分钟前
ProDrive:基于自身-环境协同演化的自动驾驶主动规划
人工智能·深度学习·机器学习·计算机视觉·自动驾驶
2601_9599822118 分钟前
信息科技正在重塑企业竞争力 AI时代的软件开发与数字化转型
人工智能·科技
lauo21 分钟前
当手机开始“编程”:荣耀Robot Phone的影像革命与ibbot青春版的AI“挖矿”之道
大数据·人工智能·chatgpt·智能手机·ai-native
Coffeeee22 分钟前
不能用公司的打包机,AI帮我实现了一套比打包机更好用的Android包构建/分发流程
android·人工智能·ai编程
江畔柳前堤25 分钟前
github实战指南00-命令在哪里执行?
人工智能·线性代数·oracle·数据挖掘·github·word
不爱土豆唯爱马铃薯30 分钟前
MC-032 | Git机器人monkeycode-ai自动Review和实现需求
人工智能