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

一、創建張量

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()

二、張量的類型轉換

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/bicheng/97013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/97013.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/97013.shtml

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

相關文章

3-12〔OSCP ? 研記〕? WEB應用攻擊?利用XSS提權

鄭重聲明: 本文所有安全知識與技術,僅用于探討、研究及學習,嚴禁用于違反國家法律法規的非法活動。對于因不當使用相關內容造成的任何損失或法律責任,本人不承擔任何責任。 如需轉載,請注明出處且不得用于商業盈利。 …

AI 大模型賦能智慧礦山:從政策到落地的全棧解決方案

礦山行業作為能源與工業原料的核心供給端,長期面臨 “安全生產壓力大、人工效率低、技術落地難” 等痛點。隨著 AI 大模型與工業互聯網技術的深度融合,智慧礦山已從 “政策引導” 邁入 “規模化落地” 階段。本文基于 AI 大模型智慧礦山行業解決方案&…

Node.js 項目依賴包管理

h5打開以查看 一、核心理念:從“能用就行”到“精細化管理” 一個規范的依賴管理體系的目標是: 可復現:在任何機器、任何時間都能安裝完全一致的依賴,保證構建結果一致。 清晰可控:明確知道每個依賴為何存在&#x…

洛谷P1835素數密度 詳解

題目如下:這里面有部分代碼比較有意思:1,為何開始先遍歷,最終值小于50000?因為題目要求的右邊與左邊差小于 10^6 ,所以最多有10^3個素數,所以保存里面的素數數量大于1000,而50000的化…

突破限制:FileCodeBox遠程文件分享新體驗

文章目錄【視頻教程】1.Docker部署2.簡單使用演示3. 安裝cpolar內網穿透4. 配置公網地址5. 配置固定公網地址在隱私日益重要的今天,FileCodeBox與cpolar的協同為文件傳輸提供了安全高效的解決方案。通過消除公網IP限制和隱私顧慮,讓每個人都能掌控自己的…

以太網鏈路聚合實驗

一、實驗目的掌握使用手動模式配置鏈路聚合的方法掌握使用靜態 LACP 模式配置鏈路聚合的方法掌握控制靜態 LACP 模式下活動鏈路的方法掌握靜態 LACP 的部分特性的配置二、實驗環境安裝有eNSP模擬器的PC一臺,要求PC能聯網。三、實驗拓撲LSW1與LSW2均為S3700交換機。L…

autMan安裝教程

一、安裝命令 如果你系統沒安裝docker,請看往期教程 以下為通用命令 docker run -d --name autman --restart always -p 8080:8080 -p 8081:8081 -v /root/autman:/autMan --log-opt max-size10m --log-opt max-file3 hdbjlizhe/autman:latest解釋一下以上命令&…

【無人機】自檢arming參數調整選項

檢查項目 (英文名)中文含義檢查內容四旋翼建議 (新手 → 老手)理由說明All所有檢查啟用下面所有的檢查項目。? 強烈建議勾選這是最安全的設置,確保所有關鍵系統正常。Barometer氣壓計檢查氣壓計是否健康、數據是否穩定。? 必須勾選用于定高模式,數據異…

數字圖像處理(1)OpenCV C++ Opencv Python顯示圖像和視頻

Open CV C顯示圖像#include <iostream> #include <opencv2/opencv.hpp> using namespace cv;//包含cv命名空間 int main() {//imread(path)&#xff1a;從給定路徑讀取一張圖片&#xff0c;儲存為Mat變量對象Mat img imread("images/love.jpg");//named…

【芯片設計-信號完整性 SI 學習 1.2.2 -- 時序裕量(Margin)】

文章目錄1. 什么是時序裕量&#xff08;Margin&#xff09;1. 背景&#xff1a;為什么需要數字接口時序分析2. 時鐘周期方程3. Setup 裕量 (tMARGIN_SETUP)4. Hold 裕量 (tMARGIN_HOLD)5. 設計注意事項6. 實際應用場景2. 時序裕量的來源3. 測試方法(1) 眼圖測試 (Eye Diagram)(…

AOP 切面日志詳細

在業務方法上打注解package com.lib.service;Service public class BookService {LogExecution(description "查詢圖書")public Book query(int id) {return repo.findById(id);}LogExecution(description "借閱圖書")public void borrow(int id) {// 模…

使用paddlepaddle-Gpu庫時的一個小bug!

起初安裝的是 paddlepaddle 2.6.1版本。 用的是Taskflow的快速分詞以及ner快速識別&#xff1a;???????seg_accurate Taskflow("word_segmentation", mode"fast") ner Taskflow("ner", mode"fast")但是使用不了Gpu。想使用Gp…

量子能量泵:一種基于并聯電池與電容陣的動態直接升壓架構

量子能量泵&#xff1a;一種基于并聯電池與電容陣的動態直接升壓架構 摘要 本文提出了一種革命性的高效電源解決方案&#xff0c;通過創新性地采用并聯電池組與串聯高壓電容陣相結合的架構&#xff0c;徹底解決了低電壓、大功率應用中的升壓效率瓶頸與電池一致性難題。該方案摒…

【Linux網絡】網絡基礎概念——帶你打開網絡的大門

1. 計算機網絡背景 文章目錄1. 計算機網絡背景網絡發展2. 初識協議2.1 協議分層軟件分層的好處2.2 OSI七層模型2.3 TCP/IP五層(或四層)模型網絡發展 獨立模式 獨立模式是計算機網絡發展的最初階段&#xff0c;主要特點如下&#xff1a; 單機工作環境&#xff1a; 每臺計算機完…

簡單介紹一下Clickhouse及其引擎

一、ClickHouse 的優缺點一、ClickHouse 的優點 ? 1. 極致的查詢性能 列式存儲&#xff1a;只讀取查詢涉及的列&#xff0c;大幅減少 IO。數據壓縮&#xff1a;常見壓縮率 5~10 倍&#xff0c;減少存儲和帶寬消耗。向量化執行&#xff1a;按批次&#xff08;block&#xff09;…

【卷積神經網絡詳解與實例】8——經典CNN之VGG

1 開發背景 VGGNet是牛津大學視覺幾何組(Visual Geometry Group)提出的模型&#xff0c;該模型在2014ImageNet圖像分類與定位挑戰賽 ILSVRC-2014中取得在分類任務第二&#xff0c;定位任務第一的優異成績。其核心貢獻在于系統性地探索了網絡深度對性能的影響&#xff0c;并證明…

【分享】中小學教材課本 PDF 資源獲取指南

很多人都不知道&#xff0c;其實官方提供的中小學教材課本 PDF 文檔是完全免費且正版的&#xff0c;無需使用掃描版&#xff0c;清晰度和質量都非常高。 這些資源就藏在國家中小學智慧教育平臺&#xff08;basic.smartedu.cn&#xff09;上。這個平臺涵蓋了從小學到高中的各個…

js趣味游戲 貪吃蛇

以下是關于JavaScript趣味游戲的系統性整理&#xff0c;涵蓋經典案例、開發工具、教程資源及創意方向&#xff0c;助您快速掌握JS游戲開發的核心邏輯&#xff1a;一、經典JS趣味游戲案例貪吃蛇&#xff08;Snake Game&#xff09;核心機制&#xff1a;鍵盤控制蛇的移動方向&…

【Redis#11】Redis 在 C++ 客戶端下的安裝使用流程(一條龍服務)

一、安裝使用 --Ubuntu 下啟用 1. 前置依賴 - hiredis hiredis 是一個用 C 語言實現的 Redis 客戶端庫&#xff0c;redis-plus-plus 庫基于 hiredis 實現。在開始之前&#xff0c;請確保已安裝 libhiredis-dev&#xff0c;可以通過以下命令安裝&#xff1a; sudo apt install l…

kibana+elasticsearch console查詢示例

kibana console查詢入口如下 http://localhost:5601/app/dev_tools#/console/shell 1 整體查詢 獲取index為newbook的所有數據 GET newbook/_search 2 通用查詢 獲取index為newbook的數據中&#xff0c;bookname包含“西游”的所有數據。 GET newbook/_search { "query&q…