Day24_【深度學習(3)—PyTorch使用(1)—張量的創建和類型轉換】

一、創建張量

1.張量基本創建方式

  • torch.tensor 根據指定數據創建張量? (最重要)
  • torch.Tensor 根據形狀創建張量, 其也可用來創建指定數據的張量
  • torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 創建指定類型的張量

1.1 torch.tensor

# 方式一:創建張量 torch.tensor
def create_tensor():# 1.創建標量張量data1 = torch.tensor(3)# print(data1.ndim) # 維度:0# print(data1)# print(data1.shape)# print(data1.dtype)# 2.創建一維向量張量data2 = torch.tensor([2, 3, 4])  # 幾個數字shape就是幾 torch.Size([3]) torch.int64# print(data2,data2.shape,data2.dtype)# print(data2.ndim) # 維度:1# 3.創建二維向量張量data3 = torch.tensor([[2, 3, 4], [6, 7, 8]])  # 2個樣本,每個樣本三個特征 torch.Size([2, 3]) torch.int64# print(data3,data3.shape,data3.dtype)# print(data3.ndim) # 維度:2
if __name__ == '__main__':create_tensor()

1.2 torch.Tensor

# 方式二:創建張量 torch.Tensor
def create_Tensor():# ctrl+p:參數提示# 根據形狀# data=torch.Tensor(2,3)# data=torch.tensor(2,3) #報錯# data=torch.Tensor(3)# 根據數值data = torch.Tensor([3, 4])# print(data)
if __name__ == '__main__':create_Tensor()

1.3 torch.IntTensor、torch.FloatTensor、torch.DoubleTensor

# 方式三:創建張量 torch.IntTensor
def create_IntTensor():# 根據形狀創建# data=torch.IntTensor(3,4)# 根據數值創建data = torch.IntTensor([3, 4])# 嘗試小數# data=torch.IntTensor([3.2,4.3]) #會省略小數點后# data=torch.FloatTensor([3.2,4.3]) #tensor([3.2000, 4.3000]) torch.float32# data=torch.DoubleTensor([3.2,4.3]) #tensor([3.2000, 4.3000], dtype=torch.float64) torch.float64print(data, data.dtype)
if __name__ == '__main__':create_IntTensor()

2.創建線性和隨機張量

  • torch.arange 和 torch.linspace 創建線性張量
  • torch.random.init_seed 和 torch.random.manual_seed 隨機種子設置
  • torch.randn 創建隨機張量

2.1?torch.arange 和 torch.linspace

  1. arange(start,end,step) start默認0,step默認1,表示步長,包左不包右 包含0不包含10

  2. linspace(start,end,steps) 包左且包右,steps取多少個值

# 創建線性張量
def create_arange_linspace_tensor():arange_data=torch.arange(0,10,1)print(arange_data,arange_data.dtype) #tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) torch.int64lin_data=torch.linspace(0,10,5)print(lin_data,lin_data.dtype) #tensor([ 0.0000,  2.5000,  5.0000,  7.5000, 10.0000]) torch.float32
if __name__ == '__main__':create_arange_linspace_tensor()

2.2 torch.random.init_seed 和 torch.random.manual_seed

  • torch.initial_seed()
  • torch.random.initial_seed() # 與上一行一樣寫法
  • ?torch.manual_seed(100)
  • ?torch.random.manual_seed(100) ?# 與上一行一樣寫法
# 創建隨機張量
def create_random_tensor():# 創建兩行三列的隨機種子data=torch.randn(2,3)# 查看隨機數種子# print('隨機數種子:', torch.initial_seed()) #值一直在變# print('隨機數種子:', torch.random.initial_seed()) # 與上一行一樣寫法# 手動隨機數種子設置torch.manual_seed(100)# torch.random.manual_seed(100)  # 與上一行一樣寫法data = torch.randn(2, 3)print(data,data.dtype)
if __name__ == '__main__':create_random_tensor()

3.創建0-1張量

  • torch.ones 和 torch.ones_like 創建全1張量
  • torch.zeros 和 torch.zeros_like 創建全0張量 (重要)
  • torch.full 和 torch.full_like 創建全為指定值張量

這里的like是模仿數據的形狀進行創建,而不是模仿值

def create_ones_zeros_full_tensor():# 1.1 創建指定形狀全1張量# data = torch.ones(2, 3)# print(data,data.shape,data.size()) # torch.Size([2, 3]) torch.Size([2, 3]),pytorch中shape屬性和size()方法是一樣的# 1.2 根據張量形狀創建全1張量# data = torch.ones_like(data)# print(data)# 2.1 創建指定形狀全0張量# data=torch.zeros(2,3)# print(data,data.dtype)# 2.2 根據張量形狀創建全0張量# data=torch.zeros_like(data)# print(data,data.dtype)# 3.1 創建指定形狀指定值的張量data = torch.full([2, 3], 10)print(data) #tensor([[10, 10, 10],[10, 10, 10]])# 3.2 根據張量形狀創建指定值的張量data = torch.full_like(data, 20)print(data) #tensor([[20, 20, 20],[20, 20, 20]])if __name__ == '__main__':create_ones_zeros_full_tensor()

二、張量的類型轉換

默認類型:float32,int64

1. 張量之間的類型轉換

  • data.type(torch.DoubleTensor)
  • data.double() (重點)
# 張量元素類型轉換
def type_transform_tensor():data=torch.full([2, 3], 10)print(data,data.dtype) # torch.int64# 方式一# data1=data.type(torch.DoubleTensor)# print(data1,data1.dtype) # torch.float64# 方式二data2=data.double()print(data2,data2.dtype) #torch.float64
if __name__ == '__main__':type_transform_tensor()

2. 張量與numpy之間的類型轉換

tensor轉numpy

  • ?方式一:通過numpy()轉換為numpy,影響data_tensor的值,但可以通過data_numpy=data_tensor.numpy().copy(),深拷貝解決
  • ?方式二:通過np.array()轉換為numpy,不影響data_tensor的值,默認不共享內存?
import numpy as np
import torchdef tensor_to_numpy():# 1.tensor轉numpydata_tensor=torch.tensor([1,2,3,4,5])print(data_tensor) # tensor([1, 2, 3, 4, 5])# 方式一:通過numpy()轉換為numpy,影響data_tensor的值,但可以通過data_numpy=data_tensor.numpy().copy(),深拷貝解決data_numpy=data_tensor.numpy()print(data_numpy) # [1 2 3 4 5]# 修改numpy的值data_numpy[0]=200print(data_numpy) #[200   2   3   4   5]print(data_tensor) #tensor([200,   2,   3,   4,   5])# 方式二:通過np.array()轉換為numpy,不影響data_tensor的值# data_numpy = np.array(data_tensor)# print("data_numpy-->", data_numpy) # [1 2 3 4 5]# data_numpy[0] = 200# print("data_numpy-->", data_numpy) # [200   2   3   4   5]# print('data_tensor-->', data_tensor) # tensor([1, 2, 3, 4, 5])

numpy轉tensor

  • 方式一:torch.from_numpy 默認共享內存,使用 copy 函數避免共享,解決 data_tensor = torch.from_numpy(data_numpy.copy())
  • ?方式2:torch.tensor 默認不共享內存?
def numpy_to_tensor():# 2.numpy轉tensor# 準備一個numpy數據data_numpy=np.array([2,3,4])# print(data_numpy,data_numpy.dtype) # [2 3 4] int64# 方式一:torch.from_numpy 默認共享內存,使用 copy 函數避免共享,解決 data_tensor = torch.from_numpy(data_numpy.copy())# data_tensor = torch.from_numpy(data_numpy)# # print(data_tensor,data_tensor.dtype) # tensor([2, 3, 4]) torch.int64# # 修改tensor的值,發現會影響numpy# data_tensor[0]=200# print(data_tensor,data_tensor.dtype) # tensor([200,   3,   4]) torch.int64# print(data_numpy,data_numpy.dtype) # [200   3   4] int64# 方式2:torch.tensor 默認不共享內存 data_tensor=torch.tensor(data_numpy)data_tensor[0]=200print(data_tensor) # tensor([200,   3,   4])print(data_numpy) # [2 3 4]
if __name__ == '__main__':numpy_to_tensor()

3.標量張量和數字轉換(重要)

data_tensor.item()

def scalar_tensor_to_number():# 標量轉number# data_tensor=torch.tensor(3)# 一維向量轉numberdata_tensor = torch.tensor([3]) # 一個數字 (1,)# 二維矩陣轉number# data_tensor = torch.tensor([[3]]) # 一行一列(1,1)print(data_tensor) # tensor(3) tensor([3]) tensor([[3]])data1=data_tensor.item()print(data1) # 3
if __name__ == '__main__':scalar_tensor_to_number()

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

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

相關文章

阿里云圖像編輯大模型開發部署

與阿里云一起輕松實現數智化讓算力成為公共服務:用大規模的通用計算,幫助客戶做從前不能做的事情,做從前做不到的規模。讓數據成為生產資料:用數據的實時在線,幫助客戶以數據為中心改變生產生活方式創造新的價值。圖像…

查看磁盤分區并新建一個分區,掛載分區

linux系統磁盤df -h查看文件系統的磁盤的空間占用情況,常用于快速檢查磁盤使用率:df -h-h是說把磁盤空間以G位單位,如果直接用df也是可以的,只不過單位是塊,看的不明顯du -sh /home/查看/home目錄下總共占用了多大的空…

vscode單擊暫時預覽文件 雙擊持續打開文件

直接單擊文件列表中的文件,會在編輯器中以預覽模式打開 文件標簽會顯示為斜體,表示是預覽狀態 當您單擊另一個文件或開始編輯時,預覽文件會自動關閉 在 settings.json 中添加,mac通過cmd,實現。 json {"workbench.editor.ena…

設計模式-橋接模式04

什么是橋接模式? 橋接模式就是把事物的兩個方面(兩個變化的維度)分開管理,讓它們可以分別自由變化,然后通過一個“橋”把它們連接起來。舉個生活中的例子 想象一下你在買鞋子: 鞋子有不同的款式&#xff08…

群暉企業級NAS :從中小企業效率工具到核心業務數據基石

在數字化轉型加速的今天,數據已成為企業最核心的資產。全球超半數財富 500 強企業選擇群暉(Synology)作為數據管理伙伴,其企業級 NAS 解決方案憑借 DSM 操作系統的生態優勢、硬件與軟件的深度協同,以及覆蓋全場景的產品…

C++訪問限定符private、public、protected的使用場景

C 訪問控制關鍵字:public、private、protected 在C中,public、private和protected是訪問控制關鍵字,用于實現面向對象編程的封裝特性,控制類成員的訪問權限。 訪問控制關鍵字的使用場景 1. public(公有成員&#xff09…

CKA08--PVC

Task mariadb namespace 中的 MariaDB Deployment 被誤刪除。請恢復該 Deployment 并確保數據持久性。 請按照以下步驟: 如下規格在 mariadb namespace 中創建名為 mariadb 的 PersistentVolumeClaim (PVC): 訪問模式為 ReadWriteOnce 存儲為 250Mi 集群…

Freertos系列(調度機制與創建任務)

如果不想看的可以直接使用git把我的代碼下載出來,里面工程挺全的,后期會慢慢的補注釋之類的 碼云地址:stm32學習筆記: stm32學習筆記源碼 如果不會使用git快速下載可以選擇直接下載壓縮包或者去看看git的使用 Git入門教程-CSDN博客 一 調…

C++中std::vector Vs std::deque VS std::list對比詳解

1) 核心差異速覽 std::vector:連續內存、隨機訪問 O(1)、尾部 push_back 攤還 O(1)、中間插入/刪除 O(n),非常緩存友好。std::deque:分段(block)存儲,不是整體連續;隨機訪問 O(1)(但…

【js】js實現日期轉大寫:

文章目錄一、方法:二、使用效果:一、方法: export function dateToChnese(strDate) {let dateMap {year: "",month: "",day: ""}if (!strDate || strDate.length 0) return dateMap;const chineseDigit [&…

逆向 js

參考地址:https://blog.csdn.net/2302_80243887/article/details/146349209 注意事項 1. crypto-js 安裝 需要你的.js文件同級目錄執行npm install crypto-js 才能讓js文件引入包 注意事項2: crypto-js 執行js 報錯_external_runtime.py" A…

FFmpeg的安裝及簡單使用

簡介 FFmpeg 是一個跨平臺的音視頻處理工具庫/命令行工具,其核心作用是:對音視頻文件或流進行解碼、轉換(編碼)、封裝/解封裝等處理。 友情提示 本次安裝以Windows64位操作系統為例 一、下載及安裝 1、前往FFmpeg官網&#xff0…

Science Advances--3D打印生物啟發扭曲雙曲超材料,用于無人機沖擊緩沖和自供電實時傳感

湍流引起的振動會對飛機的結構完整性及飛行穩定性造成巨大威脅,尤其是在無人駕駛飛行器(UAV)中,實時的沖擊監測和輕質防護尤為重要。該研究基于生物啟發,通過3D 打印尼龍PA12 制備了一種扭轉-雙曲面超材料(…

AI大模型的研發流程

開發一個大模型是一個龐大、復雜且資源密集的系統工程,涉及算法研究、工程實現、數據管理和算力基礎設施等多個層面。下面我將為您提供一個從零開始開發大模型的全景式路線圖,涵蓋了從概念到部署的全過程。請注意,完全從零開始訓練一個類似GP…

Docker desktop安裝Redis Cluster集群

本文章將介紹如何在 Windows 系統的 Docker Desktop 環境中搭建 Redis 集群。將創建一個包含 6 個節點(3 主 3 從)的 Redis 集群。 環境準備 Windows 10/11 操作系統Docker Desktop 已安裝并運行 步驟 清理環境(如之前有嘗試) 如果…

Zynq開發實踐(SDK之第一個純PS工程)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】學編程的時候,大家一般都比較重視第一個項目的創建和執行。第一個fpga程序一般是led閃爍,第一個c程序一般就是hello world程…

EJS(Embedded JavaScript)(一個基于JavaScript的模板引擎,用于在HTML中嵌入動態內容)

文章目錄**1. 什么是 EJS?****2. 核心特點**- **接近原生 HTML**- **動態渲染**- **輕量高效**- **與 Express 深度集成****3. EJS 的基本語法****4. 示例代碼****HTML 模板(views/user.ejs)****Express 中渲染模板****5. 使用場景**1. **服務…

Linux:基于阻塞隊列的生產者消費模型

文章目錄一、生產者消費者模型的基本原則💕💕生產者-消費者模型的 321 原則💕💕二、為何要使用生產者消費者模型1. 解耦2. 支持并發 (提高效率)3. 忙閑不均的支持三、基于 BlockingQueue 的生產者消費者模型…

ensp啟動路由器報錯40

1. 先關閉 eNSP 模擬器、關閉 Virtualbox2. 在everything里面搜索 .VirtualBox文件夾,然后刪掉3. 再打開 eNSP,不添加任何模擬設備,單擊“菜單-工具-注冊設備”,將 AR_Base 重新注冊。4. 關閉 eNSP 模擬器

代碼隨想錄二刷之“圖論”~GO

A.深搜與廣搜(重點掌握!!!!) 深搜類似于回溯法 搜索方向,是認準一個方向搜,直到碰壁之后再換方向換方向是撤銷原路徑,改為節點鏈接的下一個路徑,回溯的過程…