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

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

相关推荐
阿坡RPA2 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
用户27784491049932 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心2 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
算AI4 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
凯子坚持 c5 小时前
基于飞桨框架3.0本地DeepSeek-R1蒸馏版部署实战
人工智能·paddlepaddle
你觉得2055 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
8K超高清6 小时前
中国8K摄像机:科技赋能文化传承新图景
大数据·人工智能·科技·物联网·智能硬件
hyshhhh6 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
薛定谔的猫-菜鸟程序员6 小时前
零基础玩转深度神经网络大模型:从Hello World到AI炼金术-详解版(含:Conda 全面使用指南)
人工智能·神经网络·dnn
币之互联万物6 小时前
2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点
人工智能·科技