1. 程式人生 > 實用技巧 >tensor 張量

tensor 張量

概念

幾何代數中定義的張量是基於向量和矩陣的推廣,通俗一點理解的話,我們可以將標量視為零階張量,向量視為一階張量,那麼矩陣就是二階張量。


0維張量/標量 標量是一個數字

1維張量/向量 1維張量稱為“向量”。

2維張量 2維張量稱為矩陣

3維張量 公用資料儲存在張量 時間序列資料 股價 文字資料 彩色圖片(RGB)

讓我們先來看看tensor(張量)是什麼?

張量=容器

張量是現代機器學習的基礎。它的核心是一個數據容器,多數情況下,它包含數字,有時候它也包含字串,但這種情況比較少。因此把它想象成一個數字的水桶。

張量有多種形式,首先讓我們來看最基本的形式,你會在深度學習中偶然遇到,它們在0維到5維之間。我們可以把張量的各種型別看作這樣(對被題目中的貓咪吸引進來小夥伴說一句,不要急!貓咪在後面會出現哦!):

0維張量/標量 ,裝在張量/容器水桶中的每個數字稱為“標量”。標量是一個數字。你會問為什麼不乾脆叫它們一個數字呢?我不知道,也許數學家只是喜歡聽起來酷?標量聽起來確實比數字酷。

實際上,你可以使用一個數字的張量,我們稱為0維張量,也就是一個只有0維的張量。它僅僅只是帶有一個數字的水桶。想象水桶裡只有一滴水,那就是一個0維張量。

本教程中,我將使用Python,Keras,TensorFlow和Python庫Numpy。在Python中,張量通常儲存在Nunpy陣列,Numpy是在大部分的AI框架中,一個使用頻率非常高的用於科學計算的資料包。

你將在Kaggle(資料科學競賽網站)上經常看到Jupyter Notebooks(安裝見文末閱讀連結,“數學爛也要學AI:帶你造一個經濟試用版AI終極必殺器”)關於把資料轉變成Numpy陣列。Jupyter notebooks本質上是由工作程式碼標記嵌入。可以認為它把解釋和程式融為一體。

我們為什麼想把資料轉換為Numpy陣列?

很簡單。因為我們需要把所有的輸入資料,如字串文字,影象,股票價格,或者視訊,轉變為一個統一得標準,以便能夠容易的處理。

這樣我們把資料轉變成數字的水桶,我們就能用TensorFlow處理。

它僅僅是組織資料成為可用的格式。在網頁程式中,你也許通過XML表示,所以你可以定義它們的特徵並快速操作。同樣,在深度學習中,我們使用張量水桶作為基本的樂高積木。

1維張量/向量 如果你是名程式設計師,那麼你已經瞭解,類似於1維張量:陣列

每個程式語言都有陣列,它只是單列或者單行的一組資料塊。在深度學習中稱為1維張量。張量是根據一共具有多少座標軸來定義。1維張量只有一個座標軸。 1維張量稱為“向量”。我們可以把向量視為一個單列或者單行的數字。

如果想在Numpy得出此結果,按照如下方法:我們可以通過NumPy’s ndim函式,檢視張量具有多個座標軸。我們可以嘗試1維張量。

2維張量 你可能已經知道了另一種形式的張量,矩陣——2維張量稱為矩陣,這不是基努·裡維斯(Keanu Reeves)的電影《黑客帝國》,想象一個excel表格。我們可以把它看作為一個帶有行和列的數字網格。這個行和列表示兩個座標軸,一個矩陣是二維張量,意思是有兩維,也就是有兩個座標軸的張量。

源自:https://blog.csdn.net/qq_31821675/article/details/79188449

# -*- coding: utf-8 -*-
"""
Created on Mon Nov 16 14:29:10 2020

@author: 86188
"""
from __future__ import print_function
import torch
'''
構造一個隨機初始化的矩陣
x = torch.empty(5, 3)
print(x)
'''

'''
構造一個矩陣全為 0,而且資料型別是 long.
x= torch.zeros(5,3,dtype = torch.long)
print(x)
'''

'''
構造一個張量,直接使用資料:
x= torch.tensor([5.5,3])
print(x)
'''
'''
x = x.new_ones(5,3,dtype=torch.double)
print(x)

x = torch.randn_like(x,dtype = torch.float)
print(x)

print(x.size())

y = torch.rand(5,3)
print(x+y)


print(torch.add(x,y))

result = torch.empty(5,3)
torch.add(x,y,out = result)
print(result)

y.add_(x)
print(y)

print(x[:1])

'''
'''
x = torch.randn(4,4)
y = x.view(16)
z = x.view(-1,8)
print(x.size(),y.size(),z.size)
print(x,y,z)
'''
x =torch.randn(1)
print(x)
print(x.item())