昇思MindSpore學習筆記3--張量 Tensor

一、張量Tensor概念

矢量、標量和其他張量的計算函數,有內積、外積、線性映射以及笛卡兒積

張量坐標在 n?維空間內,有?nr?個分量

每個分量都是坐標的函數,變換時每個坐標分量都按規則作線性變換

張量是一種特殊的數據結構,類似于數組和矩陣

張量是MindSpore網絡運算中的基本數據結構

二、環境準備

1. 安裝minspore模塊

!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.3.0rc1

2.導入minspore、Tensor等相關模塊

import numpy as np
import mindspore
from mindspore import ops
from mindspore import Tensor, CSRTensor, COOTensor

三、創建張量

支持Tensor、float、int、bool、tuple、listnumpy.ndarray

1.根據數據自動生成

data = [1, 0, 1, 0]
x_data = Tensor(data)
print(x_data, x_data.shape, x_data.dtype)

輸出:

[1 0 1 0] (4,) Int64

2.從NumPy數組生成

np_array = np.array(data)
x_np = Tensor(np_array)
print(x_np, x_np.shape, x_np.dtype)

輸出:[

[1 0 1 0] (4,) Int64

3.init初始化器構造張量

支持參數:

init? ? ?:initializer的子類,? 例如init=One()主要用于并行模式

shapelist、tuple、int,? ?例如shape=(2, 2)

dtype?mindspore.dtype,例如dtype=mindspore.float32

from mindspore.common.initializer import One, Normal# Initialize a tensor with ones
tensor1 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=One())
# Initialize a tensor from normal distribution
tensor2 = mindspore.Tensor(shape=(2, 2), dtype=mindspore.float32, init=Normal())print("tensor1:\n", tensor1)
print("tensor2:\n", tensor2)

輸出:

tensor1:[[1. 1.][1. 1.]]
tensor2:[[-0.00247062  0.00723172][-0.00915686 -0.00984331]]

4.繼承張量生成新張量

from mindspore import opsx_ones = ops.ones_like(x_data)
print(f"Ones Tensor: \n {x_ones} \n")x_zeros = ops.zeros_like(x_data)
print(f"Zeros Tensor: \n {x_zeros} \n")

輸出:

Ones Tensor: [1 1 1 1] Zeros Tensor: [0 0 0 0] 

四、張量屬性

shape ??:形狀(tuple)

dtype ??:MindSpore數據類型

itemsize:單個元素占用字節數(整數)

nbytes ?:整個張量占用總字節數(整數)

ndim ???:維數,張量的秩=len(tensor.shape)(整數)

size ???:張量所有元素的個數(整數)

strides :張量每一維步長,每一維字節數(tuple)

x = Tensor(np.array([[1, 2], [3, 4]]), mindspore.int32)print("x_shape:", x.shape)
print("x_dtype:", x.dtype)
print("x_itemsize:", x.itemsize)
print("x_nbytes:", x.nbytes)
print("x_ndim:", x.ndim)
print("x_size:", x.size)
print("x_strides:", x.strides)

輸出:

x_shape: (2, 2)
x_dtype: Int32
x_itemsize: 4
x_nbytes: 16
x_ndim: 2
x_size: 4
x_strides: (8, 4)

五、張量索引

從0開始編制

負索引表示倒序編制

切片冒號:和 ...

tensor = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))print("First row: {}".format(tensor[0]))
print("value of bottom right corner: {}".format(tensor[1, 1]))
print("Last column: {}".format(tensor[:, -1]))
print("First column: {}".format(tensor[..., 0]))

輸出:

First row: [0. 1.]
value of bottom right corner: 3.0
Last column: [1. 3.]
First column: [0. 2.]

六、張量運算

包括算術、線性代數、矩陣處理(轉置、標引、切片)、采樣等

1.算術運算:

x = Tensor(np.array([1, 2, 3]), mindspore.float32)
y = Tensor(np.array([4, 5, 6]), mindspore.float32)output_add = x + y
output_sub = x - y
output_mul = x * y
output_div = y / x
output_mod = y % x
output_floordiv = y // xprint("add:", output_add)
print("sub:", output_sub)
print("mul:", output_mul)
print("div:", output_div)
print("mod:", output_mod)
print("floordiv:", output_floordiv)

輸出:

add: [5. 7. 9.]
sub: [-3. -3. -3.]
mul: [ 4. 10. 18.]
div: [4.  2.5 2. ]
mod: [0. 1. 0.]
floordiv: [4. 2. 2.]

2. 連接concat,在指定維度連接張量

示例:

data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))
data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))
output = ops.concat((data1, data2), axis=0)print(output)
print("shape:\n", output.shape)

輸出:

[[0. 1.][2. 3.][4. 5.][6. 7.]]
shape:(4, 2)

3. stack,堆疊張量,形成新的維度

data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))
data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))
output = ops.stack([data1, data2])print(output)
print("shape:\n", output.shape)

輸出:

[[[0. 1.][2. 3.]][[4. 5.][6. 7.]]]
shape:(2, 2, 2)

七、張量與NumPy轉換

1. Tensor轉換為NumPy

?Tensor.asnumpy()

t = Tensor([1., 1., 1., 1., 1.])
print(f"t: {t}", type(t))
n = t.asnumpy()
print(f"n: {n}", type(n))

輸出:

t: [1. 1. 1. 1. 1.] <class 'mindspore.common.tensor.Tensor'>
n: [1. 1. 1. 1. 1.] <class 'numpy.ndarray'>

2.NumPy轉換為Tensor

Tensor.from_numpy()

n = np.ones(5)
t = Tensor.from_numpy(n)
np.add(n, 1, out=n)
print(f"n: {n}", type(n))
print(f"t: {t}", type(t))

輸出:

n: [2. 2. 2. 2. 2.] <class 'numpy.ndarray'>
t: [2. 2. 2. 2. 2.] <class 'mindspore.common.tensor.Tensor'>

八、稀疏張量

絕大部分元素的值為零或者某個確定值。

常用CSR和COO兩種稀疏數據格式

稀疏張量的表達形式

<indices:Tensor, values:Tensor, shape:Tensor>

indices 非零下標元素

values 非零元素的值

shape 被壓縮的稀疏張量的形狀

三種稀疏張量結構:CSRTensor、COOTensor和RowTensor。

1.CSRTensor

Compressed Sparse Row壓縮稀疏

values?:非零元素的值,一維張量

indptr?:維度,非零元素在values中起始位置和終止位置,一維整數張量

indices維度,非零元素在列中的位置,其長度與values相等,一維整數張量

???????索引數據類型支持int16、int32、int64

shape??:壓縮稀疏張量的形狀,數據類型為Tuple,目前僅支持二維CSRTensor

參考mindspore.CSRTensor。

示例:

indptr = Tensor([0, 1, 2])
indices = Tensor([0, 1])
values = Tensor([1, 2], dtype=mindspore.float32)
shape = (2, 4)# Make a CSRTensor
csr_tensor = CSRTensor(indptr, indices, values, shape)print(csr_tensor.astype(mindspore.float64).dtype)

輸出:

Float64

生成的CSRTensor:

2.COOTensor

Coordinate Format坐標格式

values?:非零元素的值,一維張量,形狀:[N]

indices:每行代表非零元素下標,二維整數張量,形狀:[N, ndims]

索引數據類型支持int16、int32、int64。

shape??:壓縮稀疏張量的形狀,目前僅支持二維COOTensor

參考mindspore.COOTensor。

示例:

indices = Tensor([[0, 1], [1, 2]], dtype=mindspore.int32)
values = Tensor([1, 2], dtype=mindspore.float32)
shape = (3, 4)# Make a COOTensor
coo_tensor = COOTensor(indices, values, shape)print(coo_tensor.values)
print(coo_tensor.indices)
print(coo_tensor.shape)
print(coo_tensor.astype(mindspore.float64).dtype)  # COOTensor to float64

輸出:

[1. 2.]
[[0 1][1 2]]
(3, 4)
Float64

生成的COOTensor:

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

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

相關文章

利用深度學習模型進行語音障礙自動評估

語音的產生涉及器官的復雜協調&#xff0c;因此&#xff0c;語音包含了有關身體各個方面的信息&#xff0c;從認知狀態和心理狀態到呼吸條件。近十年來&#xff0c;研究者致力于發現和利用語音生物標志物——即與特定疾病相關的語音特征&#xff0c;用于診斷。隨著人工智能&…

js基礎學習

1、js概述 js是javascript的簡稱&#xff0c;作用是實現頁面和用戶的交互 js由瀏覽器解析運行&#xff0c;不需要編譯 js由es基礎語法&#xff0c;bom瀏覽器相關&#xff0c;dom文檔操作相關 三大部分組成 2、html引入js <!DOCTYPE html> <html lang"zh-CN&qu…

Vue項目打包上線

Nginx 是一個高性能的開源HTTP和反向代理服務器&#xff0c;也是一個IMAP/POP3/SMTP代理服務器。它在設計上旨在處理高并發的請求&#xff0c;是一個輕量級、高效能的Web服務器和反向代理服務器&#xff0c;廣泛用于提供靜態資源、負載均衡、反向代理等功能。 1、下載nginx 2、…

k8s學習--k8s群集ELK日志收集部署最詳細的過程與應用(收集k8s群集日志)(圖形化界面手把手教學)

文章目錄 FilebeatFilebeat主要特點Filebeat使用場景 ELK簡介Elasticsearch簡介Elasticsearch主要特點Elasticsearch使用場景 Logstash簡介Logstash主要特點Logstash使用場景 Kibana簡介Kibana主要特點Kibana使用場景 簡單理解 環境一、ELK集群部署1.軟件安裝2.軟件配置及啟動(…

Webpack: Loader開發 (2)

概述 在上一篇文章中&#xff0c;我們已經詳細了解了開發 Webpack Loader 需要用到的基本技能&#xff0c;包括&#xff1a;Loader 基本形態、如何構建測試環境、如何使用 Loader Context 接口等。接下來我們繼續拓展學習一些 Loader 輔助工具&#xff0c;包括&#xff1a; 了…

telegram支付

今天開始接入telegram支付,參考教程這個是telegram的官方說明,詳細介紹了機器人支付API。 文章公開地址 新建機器人 因為支付是一個單獨的系統,所以在做支付的時候單獨創建了一個bot,沒有用之前的bot了,特意這樣將其分開。創建bot的方法和之前不變,這里不過多介紹。 獲…

Linux文件數據寫入

結構體 fd fd也就是文件描述符&#xff0c;用于標識已經打開的文件、管道、socket等。是進程和內核的橋梁&#xff0c;允許進程執行各種文件操作 struct fd {struct file *file;unsigned int flags; };file Linux內核中表示打開文件的結構體&#xff0c;包含了文件操作所需…

什么是自然語言處理(NLP)?詳細解讀文本分類、情感分析和機器翻譯的核心技術

什么是自然語言處理&#xff1f; 自然語言處理&#xff08;Natural Language Processing&#xff0c;簡稱NLP&#xff09;是人工智能的一個重要分支&#xff0c;旨在讓計算機理解、解釋和生成人類的自然語言。打個比方&#xff0c;你和Siri對話&#xff0c;或使用谷歌翻譯翻譯一…

2024廣州國際米粉產業展覽會暨米粉節

2024廣州國際米粉產業展覽會 時間&#xff1a;2024年11月16-18日 地點&#xff1a;廣州中國進出口商品交易會展館 主辦單位&#xff1a;企陽國際會展集團 【展會簡介】 米粉作為一種歷史悠久&#xff0c;人們日常食用的食物&#xff0c;其市場需求穩定&#xff0c;且隨著人…

學習.NET 8 MiniApis入門

介紹篇 什么是MiniApis&#xff1f; MiniApis的特點和優勢 MiniApis的應用場景 環境搭建 系統要求 安裝MiniApis 配置開發環境 基礎概念 MiniApis架構概述 關鍵術語解釋&#xff08;如Endpoint、Handler等&#xff09; MiniApis與其他API框架的對比 第一個MiniApis…

WSL2安裝ContOS7并更新gcc

目錄 WSL2安裝CentOS7下載安裝包安裝啟動CentOS7 CentOS7更換國內源gcc從源碼安裝gcc卸載gcc CMake中使用gcc關于linux配置文件參考 WSL2安裝CentOS7 Windows11官方WSL2已經支持Ubuntu、Open SUSE、Debian。但是沒有centos&#xff0c;所以centos的安裝方式略有不同。 下載安…

【面試題】網絡IP協議(第六篇)

1.簡述IP協議的作用。 IP協議&#xff08;Internet Protocol&#xff09;是TCP/IP協議族中的核心協議之一&#xff0c;主要用于在互聯網上進行數據傳輸。它的主要作用包括&#xff1a; 尋址&#xff1a;IP協議通過IP地址來唯一標識網絡中的每一臺設備&#xff0c;確保數據包能…

家政小程序的開發:打造現代式便捷家庭服務

隨著現代生活節奏的加快&#xff0c;人們越來越注重生活品質與便利性。在這樣的背景下&#xff0c;家政服務市場迅速崛起&#xff0c;成為許多家庭日常生活中不可或缺的一部分。然而&#xff0c;傳統的家政服務往往存在信息不對稱、服務效率低下等問題。為了解決這些問題&#…

mindspore打卡之量子測量

mindspore打卡之量子測量 我們可以看到&#xff0c;采樣1000中&#xff0c;00’出現了503次&#xff0c;11’出現了497次&#xff08;由于測量具有隨機性&#xff0c;每次運行結果會略有不同&#xff09;&#xff0c;采樣結果符合概率分布&#xff0c;細微的誤差是由模擬器噪聲…

【D3.js in Action 3 精譯】1.2.2 可縮放矢量圖形(三)

當前內容所在位置 第一部分 D3.js 基礎知識 第一章 D3.js 簡介 1.1 何為 D3.js&#xff1f;1.2 D3 生態系統——入門須知 1.2.1 HTML 與 DOM1.2.2 SVG - 可縮放矢量圖形 ?? 第一部分第二部分【第三部分】?? 1.2.3 Canvas 與 WebGL&#xff08;精譯中 ?&#xff09;1.2.4 C…

gameui C++的代碼

gameui C的代碼 #include <graphics.h> #include "gameboard.h" const int WIDTH 560; const int HEIGHT 780; const int GRID_SIZE 120; class GameUi { private: public:GameUi(GameBoard& gb) {// 初始化圖形窗口initgraph(WIDTH, HEIGHT);// 設置…

小米內推官

小米硬件提前批開始啦&#xff01;&#xff01;&#xff01;&#xff01; 請使用小米公司內推碼: Q9BN21S 招聘對象&#xff1a;25屆秋招 中國內地:畢業時間2025.01-2025.12 中國港澳臺及海外:畢業時間2025.07-2025.12 工作地點&#xff1a;北京、南京、武漢、深圳、上海等…

C++中Ranges庫的基本用法,如何簡化和增強對集合的操作。

Ranges庫的基本用法 什么是Ranges庫&#xff1f; C20引入的Ranges庫&#xff08;<ranges>&#xff09;是一個強大的工具集&#xff0c;旨在簡化和增強對集合&#xff08;如數組、向量等序列容器&#xff09;的操作。它提供了一套用于操作序列的功能性接口&#xff0c;使…

獨立站新風口:TikTok達人帶貨背后的雙贏合作之道

TikTok以其龐大的用戶基礎、高度互動性和創新的內容形式&#xff0c;為獨立站帶來了前所未有的發展機遇。獨立站與TikTok達人的合作&#xff0c;不僅能夠幫助獨立站快速提升品牌知名度和銷售額&#xff0c;還能為TikTok達人帶來更多商業機會和影響力。本文Nox聚星將和大家探討獨…

Android sdk 安裝已經環境配置

&#x1f34e;個人博客&#xff1a;個人主頁 &#x1f3c6;個人專欄&#xff1a;Android ?? 功不唐捐&#xff0c;玉汝于成 目錄 正文 一、下載 二、安裝 三、環境配置 我的其他博客 正文 一、下載 1、大家可去官網下載 因為需要魔法 所以就不展示了 2、去下面這…