【深度學習】P1 深度學習基礎框架 - 張量 Tensor

深度學習基礎框架 張量 Tensor

  • 張量
  • 數據操作
    • 導入
    • 創建張量
    • 獲取張量信息
    • 改變張量
    • 張量運算
  • 張量與內存

張量

Pytorch 是一個深度學習框架,用于開發和訓練神經網絡模型。

而其核心數據結構,則是張量 Tensor,類似于 Numpy 數組,但是可以支持在 GPU 上加速運算,顯著加速模型訓練過程,更適用于深度學習和神經網絡模型的構建和學習。

張量是多維數組的泛化,可以是:

  • 標量(零維張量)
  • 向量(一維張量)
  • 矩陣(二維張量)
  • 或更高維度的數組;
  • e . g . e.g. e.g. RGB 圖像可以表示為三維張量,其中一個維度表示高度,另一個維度表示寬度,最后一個維度表示顏色通道:
[[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
[[0, 255, 255], [255, 255, 0], [255, 0, 255]]]

此外,后期讀者會接觸到梯度下降與反向傳播,而張量非常重要一點,即可以自動求導,方便計算梯度并更新模型參數。


數據操作

導入

首先,導入 torch,需要注意的是,雖然稱為 Pytorch,但是我們應該導入 torch 而不是 Pytorch

import torch

創建張量

張量 tensor 表示一個數值組成的數組,

x = torch.arange(12)
print(x)
# >>> 表示結果輸出
>>> tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

通過 zeros 函數與 ones 函數創建全0、全1元素,

torch.zeros((2, 3, 4))>>> tensor([[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]])

張量同樣支持邏輯運算符構建,

x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
y = torch.tensor([[2, 2, 2, 2], [3, 3, 3, 3]])
x == y>>> tensor([[False,  True, False, False],[False,  True, False, False]])

獲取張量信息

通過 shape 屬性來訪問張量的形狀和張量中元素的總數,

# 張量的形狀
x.shape>>> torch.Size([12])
# 張量中元素的總數
x.numel()>>> 12

對張量中所有元素進行求和會產生一個只有一個元素的張量,

x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x.sum()>>> tensor(55)

通過用切片方法訪問張量內指定位置元素,

x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x[-1], x[1][1:3]>>> (tensor([1, 3, 9, 27]), tensor([3, 9]))

改變張量

通過 reshape 函數改變一個張量的形狀而不改變元素數量和元素值,

x.reshape(3, 4)>>> tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])

通過 cat 函數把多個張量連結在一起,支持按指定維度 dim 拼接,

x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
y = torch.tensor([[2, 2, 2, 2], [3, 3, 3, 3]])
torch.cat((x, y), dim=0), torch.cat((x, y), dim=1)>>> (tensor([[ 1,  2,  4,  8],[ 1,  3,  9, 27],[ 2,  2,  2,  2],[ 3,  3,  3,  3]]),tensor([[ 1,  2,  4,  8,  2,  2,  2,  2],[ 1,  3,  9, 27,  3,  3,  3,  3]]))

通過指定索引將元素寫入張量,

x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x[1, 2] = 1111>>> tensor([[1, 2, 4, 8],[1, 3, 1111, 27]])
x = torch.tensor([[1, 2, 4, 8], [1, 3, 9, 27]])
x[1, :] = 12>>> tensor([[ 1,  2,  4,  8],[12, 12, 12, 12]])

張量運算

張量支持按元素運算,

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y>>> (tensor([ 3.,  4.,  6., 10.]),tensor([-1.,  0.,  2.,  6.]),tensor([ 2.,  4.,  8., 16.]),tensor([0.5000, 1.0000, 2.0000, 4.0000]),tensor([ 1.,  4., 16., 64.]))

張量加法中,即使形狀不同,我們仍然可以通過調用廣播機制來執行張量加法,

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a + b>>> tensor([[0, 1],[1, 2],[2, 3]])

張量與內存

雖然 Python 中很少涉及到內存處理,但是如果矩陣很大,就需要考慮到內存方面。

在運行一些操作時,可能會導致為新結果分配內存,

before = id(Y)
Y = Y + X
id(Y) == before>>> False		# 說明新內存地址不等同于原內存地址

如果我們的矩陣 Y 非常大,為了效率考慮,不更換內存地址,減少操作的內存開銷,怎么做?

before = id(Y)
Y += X
id(Y) == before>>> True		# 說明沒有新分配內存空間

NumpyPython 里最基礎的多元數組運算框架,所以也要多關注 NumpyTensor 之間的轉化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166583.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI制作的《大多數普通女孩的一生》——公開教程和工作流

內容來源:JiamigouCn ?這周由AI制作的《大多數普通女孩的一生》,在抖音爆火,獲得新華網轉發。到目前為止,全網還沒有公開教程和工作流,需要花費800-2000購買。 本著AI社區共享原則,我委托公眾號“楚思智能…

小學生古詩文大會復賽在線模擬新增刷題版和闖關版,幫助孩子沖刺

小學生古詩文大會明天就要開始了,剛剛古詩文大會主辦方也正式發布了通知,總體安排、操作指引和我之前發布的一樣:2023年11月25日小學生古詩文大會復選(復賽)答題操作手冊 為了幫助參加復選(復賽&#xff09…

NFC技術簡介

NFC簡介 NFC(近場通信,Near Field Communication)是一種短距高頻的無線電技術,由非接觸式射頻識別(RFID)演變而來。 NFC工作頻率為13.56Hz,通常只有在距離不超過4厘米時才能啟動連接,其傳輸速度有106 Kbit/秒、212 Kb…

從文本生成到數據增強:探索 AI 前沿的開源套件 | 開源專題 No.44

Significant-Gravitas/AutoGPT Stars: 150.4k License: MIT AutoGPT 是開源 AI 代理生態系統的核心工具包。它采用模塊化和可擴展的框架,使您能夠專注于以下方面: 構建 - 為驚人之作打下基礎。測試 - 將您的代理調整到完美狀態。查看 - 觀察進展成果呈…

【Mybatis源碼】反射 - MetaClass

前面我們介紹了Reflector類,Reflector主要完成了Class類中Setter、Getter方法的封裝,可以使用屬性獲取對應的Getter、Setter方法完成方法的調用,同時也可以判斷屬性是否存在,是否存在Getter、Setter方法。 使用Reflector解決了訪問Class類中屬性的問題,但是如果屬性是成員…

HandBrake 1.7 近日發布

導讀HandBrake 1.7 近日發布,作為這個開源、免費和跨平臺視頻轉碼器應用程序的重大更新,適用于 GNU/Linux、macOS 和 Windows 系統。 在 HandBrake 1.6 發布近一年后,HandBrake 1.7 版本為 Linux 用戶提供了許多好處,包括視頻摘要…

C語言第二十八彈--輸入一個非負整數,返回組成它的數字之和

C語言求輸入一個非負整數&#xff0c;返回組成它的數字之和 方法一、遞歸法 思路&#xff1a;設計一個初始條件&#xff0c;通過遞歸獲取非負整數的個位&#xff0c;不斷接近遞歸條件即可。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int DigitSum(int n) {…

PGZ-SBV系列項目介紹、技術選型、技術優勢(AIO內部版)All-In-One

前情提示 項目孵化于2014年,內部正式發行于2015.隨著業務需求,部分內部高級功能逐步對外開放支持多行業(保險、金融、餐飲、旅游、電商、直播等等),多架構,支持AI集成,支持協同,只要你想到的均可集成、均已內置高安全,高可用,多技術解決方案包含av版本、gf低代碼版、…

ubuntu22.04 arrch64版在線安裝maven

腳本 if type -p mvn; thenecho "maven has been installed."elsecd /home/zenglgwget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz --no-check-certificatetar vxf apache-maven-3.9.5-bin.tar.gz rm -rf /usr/local/mav…

springboot+vue基本微信小程序的劇本殺游戲設計與實現

項目介紹 首先,論文一開始便是清楚的論述了小程序的研究內容。其次,剖析系統需求分析,弄明白“做什么”,分析包括業務分析和業務流程的分析以及用例分析,更進一步明確系統的需求。然后在明白了小程序的需求基礎上需要進一步地設計系統,主要包羅軟件架構模式、整體功能模塊、數…

通過內網穿透本地MariaDB數據庫,實現在公網環境下使用navicat圖形化工具

公網遠程連接MariaDB數據庫【cpolar內網穿透】 文章目錄 公網遠程連接MariaDB數據庫【cpolar內網穿透】1. 配置MariaDB數據庫1.1 安裝MariaDB數據庫1.2 測試局域網內遠程連接 2. 內網穿透2.1 創建隧道映射2.2 測試隨機地址公網遠程訪問3. 配置固定TCP端口地址3.1 保留一個固定的…

微信小程序 修改默認單選,多選按鈕樣式

微信小程序 修改默認單選&#xff0c;多選按鈕樣式 1.在微信開發者文檔中復制一份單選或者多選的代碼 <!--pages/index3/index.wxml--> <radio-group bindchange"radioChange"><label class"weui-cell weui-check__label" style"dis…

小程序:project.config.json / project.private.config.json / 項目配置文件 /拉取代碼產生沖突 / 如何解決

一、理解project.config.json / project.private.config.json project.config.json 文件是項目的配置文件&#xff0c;它包含了關于小程序的一些基本信息&#xff0c;例如小程序的名稱、App ID、開發者信息以及頁面路徑等。這個文件一般不會被提交到版本控制系統中&#xff0c;…

cartographer_ros使用

首先根據官方指導安裝cartographer。然后創建ros工作空間并拉取 cartographer_ros 代碼 mkdir -p carto_ws/src cd carto_ws/src catkin_init_workspace git clone https://github.com/cartographer-project/cartographer_ros.git現在需要安裝cartographer_ros依賴項。首先&a…

微信小程序使用騰訊地圖實現地點搜索并且隨著地圖的滑動加載滑動到區域的地點,本文地點使用醫院關鍵詞作為搜索地點

實現效果如下 1.頁面加載時&#xff0c;根據getLocation方法獲取用戶當前經緯度獲取20條醫院位置信息 2.頁面滑動時&#xff0c;根據滑動到的經緯度再次獲取20條醫院位置信息 獲取到的醫院位置信息 實現方法如下 1.在.wxml中添加觸發滑動的方法bindregiοnchange“onMapRegio…

【Spring集成MyBatis】核心配置文件

文章目錄 1. typeHandlers標簽2. plugins標簽通過PageHelper的API獲取分頁的信息 1. typeHandlers標簽 可以重寫類型處理器&#xff0c;或創建類型處理器來處理不支持/非標準的類型。選擇性地將它映射到一個JDBC類型&#xff1a;如Java中的Date類型&#xff0c;將其存放到數據…

docker安裝以及idea訪問docker

其他目錄&#xff1a; docker 安裝環境&#xff08;有空更新&#xff09; url “” docker 打包java包&#xff0c;并運行&#xff08;有空更新&#xff09; url “” docker 打包vue &#xff08;有空更新&#xff09; url “” docker 多服務 &#xff08;有空更新&#xff…

2023年亞太杯數學建模A題水果采摘機器人的圖像識別功能(matlab 部分代碼)

對于1-4問針對的是附錄1 中的數據 clc; close all; clear; % 圖像文件夾路徑 folder_path E:/新建文件夾/yatai/Attachment/Attachment 1/; % 圖像文件列表 image_files dir(fullfile(folder_path, *.jpg)); % 假設所有圖片都是jpg格式% 解析文件名中的數字&#xff0c;并轉…

機器學習探索計劃——數據集劃分

文章目錄 導包手寫數據劃分函數使用sklearn內置的劃分數據函數stratifyy理解舉例 導包 import numpy as np from matplotlib import pyplot as plt from sklearn.datasets import make_blobs手寫數據劃分函數 x, y make_blobs(n_samples 300,n_features 2,centers 3,clus…

Java設計模式系列:單例設計模式

Java設計模式系列&#xff1a;單例設計模式 介紹 所謂類的單例設計模式&#xff0c;就是采取一定的方法保證在整個的軟件系統中&#xff0c;對某個類只能存在一個對象實例&#xff0c;并且該類只提供一個取得其對象實例的方法&#xff08;靜態方法&#xff09; 比如 Hiberna…