PyTorch torch

2025-06-25 11:55 更新

一、PyTorch 簡(jiǎn)介

PyTorch 是一款開(kāi)源的機(jī)器學(xué)習(xí)框架,它具有以下優(yōu)勢(shì):

  • 動(dòng)態(tài)計(jì)算圖:PyTorch 使用動(dòng)態(tài)計(jì)算圖,使得用戶(hù)在調(diào)試和構(gòu)建模型時(shí)更加靈活。
  • 強(qiáng)大的 GPU 支持:PyTorch 提供了對(duì) NVIDIA GPU 的良好支持,加速計(jì)算過(guò)程。
  • 易于使用的 API:PyTorch 的 API 設(shè)計(jì)簡(jiǎn)潔直觀,便于上手,適合初學(xué)者。

二、張量(Tensor)基礎(chǔ)

張量是 PyTorch 中最基本的數(shù)據(jù)結(jié)構(gòu),用于表示多維數(shù)組。

1. 創(chuàng)建張量

import torch


## 創(chuàng)建一個(gè)空張量
empty_tensor = torch.empty(2, 3)
print("空張量:", empty_tensor)


## 創(chuàng)建一個(gè)全零張量
zero_tensor = torch.zeros(2, 3)
print("全零張量:", zero_tensor)


## 創(chuàng)建一個(gè)全一的張量
ones_tensor = torch.ones(2, 3)
print("全一的張量:", ones_tensor)


## 創(chuàng)建一個(gè)從 0 到 4 的一維張量
arange_tensor = torch.arange(5)
print("從 0 到 4 的一維張量:", arange_tensor)


## 創(chuàng)建一個(gè)指定范圍和步長(zhǎng)的一維張量
linspace_tensor = torch.linspace(0, 10, 5)
print("指定范圍和步長(zhǎng)的一維張量:", linspace_tensor)


## 創(chuàng)建一個(gè)二維單位矩陣
eye_tensor = torch.eye(3)
print("二維單位矩陣:", eye_tensor)


## 創(chuàng)建一個(gè)指定值填充的張量
full_tensor = torch.full((2, 3), 7)
print("指定值填充的張量:", full_tensor)

運(yùn)行結(jié)果示例:

空張量: tensor([[4.9444e-40, 4.6455e-40, 0.0000e+00],
        [0.0000e+00, 0.0000e+00, 0.0000e+00]])
全零張量: tensor([[0., 0., 0.],
        [0., 0., 0.]])
全一的張量: tensor([[1., 1., 1.],
        [1., 1., 1.]])
從 0 到 4 的一維張量: tensor([0, 1, 2, 3, 4])
指定范圍和步長(zhǎng)的一維張量: tensor([0., 2.5, 5., 7.5, 10.])
二維單位矩陣: tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
指定值填充的張量: tensor([[7., 7., 7.],
        [7., 7., 7.]])

2. 張量的基本操作

## 創(chuàng)建兩個(gè)張量
tensor_a = torch.tensor([[1, 2], [3, 4]])
tensor_b = torch.tensor([[5, 6], [7, 8]])


## 張量相加
add_result = torch.add(tensor_a, tensor_b)
print("張量相加結(jié)果:", add_result)


## 張量相減
sub_result = torch.sub(tensor_a, tensor_b)
print("張量相減結(jié)果:", sub_result)


## 張量相乘(逐元素相乘)
mul_result = torch.mul(tensor_a, tensor_b)
print("張量相乘結(jié)果:", mul_result)


## 張量矩陣乘法
matmul_result = torch.matmul(tensor_a, tensor_b)
print("張量矩陣乘法結(jié)果:", matmul_result)

運(yùn)行結(jié)果示例:

張量相加結(jié)果: tensor([[6, 8],
        [10, 12]])
張量相減結(jié)果: tensor([[-4, -4],
        [-4, -4]])
張量相乘結(jié)果: tensor([[5, 12],
        [21, 32]])
張量矩陣乘法結(jié)果: tensor([[19, 22],
        [43, 50]])

三、張量的索引、切片與拼接

1. 索引與切片

## 索引操作
print("第一個(gè)元素:", tensor_a[0, 0])
print("第二行:", tensor_a[1])


## 切片操作
print("前兩行:", tensor_a[:2])
print("第一列:", tensor_a[:, 0])

運(yùn)行結(jié)果示例:

第一個(gè)元素: tensor(1)
第二行: tensor([3, 4])
前兩行: tensor([[1, 2],
        [3, 4]])
第一列: tensor([1, 3])

2. 拼接張量

## 水平拼接
cat_result = torch.cat((tensor_a, tensor_b), dim=1)
print("水平拼接結(jié)果:", cat_result)


## 垂直拼接
stack_result = torch.stack((tensor_a, tensor_b), dim=0)
print("垂直拼接結(jié)果:", stack_result)

運(yùn)行結(jié)果示例:

水平拼接結(jié)果: tensor([[1, 2, 5, 6],
        [3, 4, 7, 8]])
垂直拼接結(jié)果: tensor([[[1, 2],
         [3, 4]],


        [[5, 6],
         [7, 8]]])

四、隨機(jī)抽樣

## 生成均勻分布的隨機(jī)數(shù)
rand_tensor = torch.rand(2, 3)
print("均勻分布隨機(jī)數(shù):", rand_tensor)


## 生成標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù)
randn_tensor = torch.randn(2, 3)
print("標(biāo)準(zhǔn)正態(tài)分布隨機(jī)數(shù):", randn_tensor)


## 生成指定范圍的隨機(jī)整數(shù)
randint_tensor = torch.randint(0, 10, (2, 3))
print("指定范圍隨機(jī)整數(shù):", randint_tensor)

運(yùn)行結(jié)果示例:

均勻分布隨機(jī)數(shù): tensor([[0.1234, 0.5678, 0.9012],
        [0.3456, 0.7890, 0.2345]])
標(biāo)準(zhǔn)正態(tài)分布隨機(jī)數(shù): tensor([[0.1234, -0.5678, 0.9012],
        [-0.3456, 0.7890, -0.2345]])
指定范圍隨機(jī)整數(shù): tensor([[2, 5, 7],
        [3, 8, 1]])

五、數(shù)學(xué)運(yùn)算

1. 逐點(diǎn)操作

## 計(jì)算絕對(duì)值
abs_result = torch.abs(torch.tensor([-1, -2, 3]))
print("絕對(duì)值結(jié)果:", abs_result)


## 計(jì)算三角函數(shù)
sin_result = torch.sin(torch.tensor([0, 3.1416, 6.2832]))
print("正弦函數(shù)結(jié)果:", sin_result)
cos_result = torch.cos(torch.tensor([0, 3.1416, 6.2832]))
print("余弦函數(shù)結(jié)果:", cos_result)

運(yùn)行結(jié)果示例:

絕對(duì)值結(jié)果: tensor([1, 2, 3])
正弦函數(shù)結(jié)果: tensor([0.0000, 0.0000, -0.0000])
余弦函數(shù)結(jié)果: tensor([1.0000, -1.0000, 1.0000])

2. 矩陣操作

## 矩陣轉(zhuǎn)置
transpose_result = torch.transpose(tensor_a, 0, 1)
print("矩陣轉(zhuǎn)置結(jié)果:", transpose_result)


## 矩陣求逆(需要矩陣可逆)
## tensor_a = torch.tensor([[4, 7], [2, 6]], dtype=torch.float32)
## inverse_result = torch.inverse(tensor_a)
## print("矩陣求逆結(jié)果:", inverse_result)

運(yùn)行結(jié)果示例:

矩陣轉(zhuǎn)置結(jié)果: tensor([[1, 3],
        [2, 4]])

六、代碼實(shí)操環(huán)節(jié)

實(shí)操 1:創(chuàng)建張量并進(jìn)行簡(jiǎn)單運(yùn)算

## 創(chuàng)建兩個(gè)張量
tensor_x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
tensor_y = torch.tensor([[5.0, 6.0], [7.0, 8.0]])


## 進(jìn)行加減乘除運(yùn)算
add_xy = torch.add(tensor_x, tensor_y)
sub_xy = torch.sub(tensor_x, tensor_y)
mul_xy = torch.mul(tensor_x, tensor_y)
div_xy = torch.div(tensor_x, tensor_y)


print("張量相加:", add_xy)
print("張量相減:", sub_xy)
print("張量相乘:", mul_xy)
print("張量相除:", div_xy)

運(yùn)行結(jié)果示例:

張量相加: tensor([[6., 8.],
        [10., 12.]])
張量相減: tensor([[-4., -4.],
        [-4., -4.]])
張量相乘: tensor([[5., 12.],
        [21., 32.]])
張量相除: tensor([[0.2000, 0.3333],
        [0.4286, 0.5000]])

實(shí)操 2:隨機(jī)抽樣并計(jì)算均值和標(biāo)準(zhǔn)差

## 生成隨機(jī)張量
random_tensor = torch.randn(100, 100)


## 計(jì)算均值和標(biāo)準(zhǔn)差
mean_value = torch.mean(random_tensor)
std_value = torch.std(random_tensor)


print("隨機(jī)張量均值:", mean_value)
print("隨機(jī)張量標(biāo)準(zhǔn)差:", std_value)

運(yùn)行結(jié)果示例:

隨機(jī)張量均值: tensor(0.0054)
隨機(jī)張量標(biāo)準(zhǔn)差: tensor(0.9972)

七、總結(jié)與展望

本教程從零基礎(chǔ)出發(fā),帶領(lǐng)大家認(rèn)識(shí)了 PyTorch 環(huán)境,了解了張量的基本操作、索引與切片、拼接、隨機(jī)抽樣以及數(shù)學(xué)運(yùn)算等內(nèi)容。希望大家可以通過(guò)代碼實(shí)操環(huán)節(jié)加強(qiáng)對(duì)所學(xué)知識(shí)的理解。后續(xù)可以繼續(xù)探索更多 PyTorch 相關(guān)知識(shí),如自動(dòng)梯度、神經(jīng)網(wǎng)絡(luò)構(gòu)建與訓(xùn)練等。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)