3.2 Tensorflow基礎運算
3.2 Tensorflow
基礎運算
1. 匯入Tensorflow
import tensorflow as tf
2. 矩陣計算
TensorFlow
是一個科學計算庫,它使用 張量 (Tensor
)作為資料的基本單位。
TensorFlow
的張量在概念上等同於多維陣列,我們可以使用它來描述數學中的標量(0 維陣列)、向量(1 維陣列)、矩陣(2 維陣列)等各種量,示例如下:
A
=
[
a
1
,
1
a
1
,
2
a
2
,
1
a
2
,
2
]
B
=
[
b
1
,
1
b
1
,
2
b
2
,
1
b
2
,
2
]
C
=
A
B
=
[
a
1
,
1
∗
b
1
,
1
+
a
1
,
2
∗
b
2
,
1
a
1
,
1
∗
b
1
,
2
+
a
1
,
2
∗
b
2
,
2
a
2
,
1
∗
b
1
,
1
+
a
2
,
2
∗
b
2
,
1
a
2
,
1
∗
b
1
,
2
+
a
2
,
2
∗
b
2
,
2
]
A = \begin{bmatrix} a_{1,1} & a_{1,2} \\ a_{2,1} & a_{2,2} \end{bmatrix} B = \begin{bmatrix} b_{1,1} & b_{1,2} \\ b_{2,1} & b_{2,2} \end{bmatrix}\\[2ex] C = AB = \begin{bmatrix} a_{1,1}*b_{1,1} + a_{1,2}*b_{2,1} & a_{1,1}*b_{1,2} + a_{1,2}*b_{2,2}\\a_{2,1}*b_{1,1} + a_{2,2}*b_{2,1} & a_{2,1}*b_{1,2} + a_{2,2}*b_{2,2} \end{bmatrix}
A=[a1,1a2,1a1,2a2,2]B=[b1,1b2,1b1,2b2,2]C=AB=[a1,1∗b1,1+a1,2∗b2,1a2,1∗b1,1+a2,2∗b2,1a1,1∗b1,2+a1,2∗b2,2a2,1∗b1,2+a2,2∗b2,2]
tf.constant
: 建立一個常量tensor
,按照給出value
來賦值,可以用shape
來指定其形狀。value
可以是一個數,也可以是一個list
。
tf.matmul
: 將矩陣
a
a
a乘以矩陣
b
b
b,生成
a
∗
b
a * b
a∗b
A = tf.constant([[1, 2], [3, 4]])
B = tf.constant([[5, 6], [7, 8]])
C = tf.matmul(A, B)
print(C)
輸出內容如下:
tf.Tensor(
[[19 22]
[43 50]], shape=(2, 2), dtype=int32)
輸出成功,證明Tensorflow安裝成功。
再例如:
# 定義一個隨機數(標量)
random_float = tf.random.uniform(shape=())
# 定義一個有兩個元素的零向量
zero_vector = tf.zeros(shape=(2))
# 定義兩個2*2的常量矩陣
A = tf.constant([[1, 2], [3, 4]])
B = tf.constant([[5, 6], [7, 8]])
張量的重要屬性是它的形狀、型別和值。我們可以通過張量的shape
、 dtype
屬性和numpy()
方法獲得。例如:
# 檢視矩陣A的形狀、型別和值
# 輸出(2, 2),即矩陣的長和寬均為2
print(A.shape)
# 輸出<dtype: 'float32'>
print(A.dtype)
# 輸出[[1, 2], [3, 4]]
print(A.numpy())
輸出內容如下:
(2, 2)
<dtype: 'int32'>
[[1 2]
[3 4]]
在TensorFlow
中有大量的操作(Operation),可以讓我們將已有的張量進行運算後得到新的張量。示例如下:
#計算矩陣A和B的和
C = tf.add(A, B)
#計算矩陣A和B的乘積
D = tf.matmul(A, B)
#輸出
print(C)
print(D)
輸出內容如下:
tf.Tensor(
[[ 6 8]
[10 12]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[19 22]
[43 50]], shape=(2, 2), dtype=int32)
3. 自動求導機制
在機器學習中,我們經常需要計算函式的導數。TensorFlow
提供了強大的自動求導機制來計算導數。
在時執行模式下,TensorFlow
引入了tf.GradientTape()
這個 “求導記錄器” 來實現自動求導。
以下程式碼展示瞭如何使用tf.GradientTape()
計算函式
y
(
x
)
=
x
2
y(x) = x^2
y(x)=x2在
x
=
3
x = 3
x=3 時的導數:
x = tf.Variable(initial_value = 3.) #x在3出
with tf.GradientTape() as tape: # 在tf.GradientTape()的上下文內,所有計算步驟都會被記錄以用於求導
y = tf.square(x)
y_grad = tape.gradient(y, x) #計算y關於x的導數
print(y, y_grad)
輸出內容如下:
tf.Tensor(9.0, shape=(), dtype=float32) tf.Tensor(6.0, shape=(), dtype=float32)
這裡 x 是一個初始化為 3 的 變數 (Variable),使用 tf.Variable()
進行宣告。
與普通張量一樣,變數同樣具有形狀、型別和值三種屬性。
使用變數需要有一個初始化過程,可以通過在 tf.Variable()
中指定 initial_value 引數來指定初始值。這裡將變數 x 初始化為 3
變數與普通張量的一個重要區別是它預設能夠被 TensorFlow
的自動求導機制所求導,因此往往被用於定義機器學習模型的引數。
tf.GradientTape()
是一個自動求導的記錄器。只要進入了 with tf.GradientTape() as tape
的上下文環境,程式在這個環境中計算的步驟都會被自動記錄。
X = tf.constant([[1., 2.], [3., 4.]])
y = tf.constant([[1.], [2.]])
w = tf.Variable(initial_value = [[1.], [2.]])
b = tf.Variable(initial_value = 1.)
with tf.GradientTape() as tape:
L = tf.reduce_sum(tf.square(tf.matmul(X, w) + b - y))
w_grad, b_grad = tape.gradient(L, [w, b])
print(L, w_grad, b_grad)
輸出內容如下;
tf.Tensor(125.0, shape=(), dtype=float32) tf.Tensor(
[[ 70.]
[100.]], shape=(2, 1), dtype=float32) tf.Tensor(30.0, shape=(), dtype=float32)
這裡, tf.square()
操作代表對輸入張量的每一個元素求平方,不改變張量形狀
tf.reduce_sum()
操作代表對輸入張量的所有元素求和,輸出一個形狀為空的張量
TensorFlow
中有大量的張量操作 API,包括數學運算、張量形狀操作(如 tf.reshape()
)、切片和連線(如 tf.concat()
)等多種型別
可以通過查閱 TensorFlow
的官方 API 文件來進一步瞭解
相關文章
- TensorFlow 計算與智慧基礎
- [shell基礎]——算術運算
- 計算機基礎:位運算計算機
- Python基礎運算分享Python
- NumPy 基礎 (二) - 陣列運算陣列
- Java 基礎 之 算數運算子Java
- JAVA基礎提高之位運算Java
- javascript基礎(算數運算子)(八)JavaScript
- Python基礎教程04 運算Python
- tensorflow(一):基礎
- tensorflow基礎概念
- tensorflow基礎版
- pytorch基礎七(矩陣運算)PyTorch矩陣
- 05-JavaScript基礎-算數運算子JavaScript
- PHP基礎教程-10 算術運算子PHP
- Python 快速教程(基礎篇04):運算Python
- Tensorflow-基礎使用
- ThinkPHP3.2 快速入門(1)基礎PHP
- 4、python基礎運算和流程控制Python
- HPC高效能運算知識: 基礎科普
- 3D數學基礎-向量運算基礎和矩陣變換3D矩陣
- 機器學習系列-tensorflow-02-基本操作運算機器學習
- 計算機最基礎的部分:運算邏輯電路(ALU)計算機
- java基礎(四) java運算順序的深入解析Java
- C語言基礎-1、邏輯型別和運算C語言型別
- 雲端計算運維-SRE基礎篇之安裝VMware運維
- 面向機器智慧的TensorFlow實戰2:TensorFlow基礎
- 雲端計算基礎學習,雲端計算的八大運用分析
- TensorFlow系列專題(二):機器學習基礎機器學習
- TensorFlow系列專題(一):機器學習基礎機器學習
- Java 基礎-運算子Java
- == 運算子 - Java基礎Java
- 運算子的基礎
- 豬行天下之Python基礎——3.2 列表 & 元組Python
- Python基礎-不同型別之間的運算規則Python型別
- 零基礎學習 Python 之數字與運算Python
- 雲端計算基礎
- 計算機基礎計算機