tensorflow 如何使用矩陣

2021-08-08 15:29:24 字數 3559 閱讀 9736

refence:  《tensorflow machine learning cookbook》 : working with matrices

packt.tensorflow.machine.learning.cookbook.2017 筆記

# -*- coding:utf-8 -*-

import tensorflow as tf

import numpy as np

def show(tip, *a):

sess = tf.session()

b = sess.run(a)  #執行計算圖,真正初 始化張量,對於隨機張量,每次會取得不同的初始化值,也就是說,這個時候,才會正常去呼叫內部的生成隨機數的**。a表示乙個操作,當sess.run()時,才會真正開始操作。

print('-------------------')

print(tip)

for i in b:

print(i)  

sess = tf.session()

id_mat = tf.diag([1.0, 1, 1]) #對角矩陣

show('tf.diag:', id_mat)

a = tf.truncated_normal([2, 3]) #mean:0 stddev:0.1

show('tf.truncated:', a)

b = tf.fill([2,3], 12.)

show('tf.fill',b)

c = tf.random_uniform([2,3]) #[0, 1)

show('tf.random_uniform', c)

d = tf.convert_to_tensor(np.array([[1., 2., 3.],   #使用tf.convert_to_tensor接收numpy陣列

[-3., -7.,-1.],

[0., 5., -2.]]))

show('tf.convert_to_tensor:', d)

#矩陣操作

print('**********=') 

print('a+b:',sess.run(a + b)) #直接是元素級操作,

print('**********=') 

print('a-b:',sess.run(b - b)) #直接是元素級操作,

print('**********=') 

print('矩陣相乘', sess.run(tf.matmul(b, id_mat))) #n*k,k*m方式

print('矩陣轉置', sess.run(tf.transpose(c)))

print('計算矩陣對應的行列式:', sess.run(tf.matrix_determinant(d))) #[λe-a]x=0, λ是特徵值,e是單位矩陣,a在這裡就是d。tensorflow不用這麼麻煩,直接算。

print('計算逆矩陣',sess.run(tf.matrix_inverse(d))) #ab=ba=e, 則b是a的逆矩陣. 當矩陣為對稱正定矩陣時,採用喬里斯基cholesky分解,否則採用lu分解。

print('逆矩陣驗證', sess.run(tf.matmul(d,tf.convert_to_tensor(np.array([[-0.5,-0.5,-0.5], [0.15789474, 0.05263158, 0.21052632], [0.39473684, 0.13157895, 0.02631579]])))))

#所謂矩陣分解就是將乙個矩陣寫成結構比較簡單的或性質比較熟悉的另一些矩陣的乘積。

print('cholesky分解', sess.run(tf.cholesky(id_mat))) #對稱正定矩陣,非數字專業,我也不好理解。

print('特徵值和特徵向量',sess.run(tf.self_adjoint_eig(d))) #列印的第乙個array是特徵值,第二個array是特徵向量,這在數學中稱為特徵分解

返回:-------------------

tf.diag:

[[ 1.  0.  0.]

[ 0.  1.  0.]

[ 0.  0.  1.]]

-------------------

tf.truncated:

[[ 0.05445328  0.35032877  0.59574115]

[ 1.07889056 -0.83000922 -1.04379463]]

-------------------

tf.fill

[[ 12.  12.  12.]

[ 12.  12.  12.]]

-------------------

tf.random_uniform

[[ 0.85289407  0.49230719  0.65092373]

[ 0.56362426  0.71060741  0.91536355]]

-------------------

tf.convert_to_tensor:

[[ 1.  2.  3.]

[-3. -7. -1.]

[ 0.  5. -2.]]

**********=

a+b: [[ 12.84969997  11.2966547   12.72791958]

[ 11.78018761  12.33149624  11.5651226 ]]

**********=

a-b: [[ 0.  0.  0.]

[ 0.  0.  0.]]

**********=

矩陣相乘 [[ 12.  12.  12.]

[ 12.  12.  12.]]

矩陣轉置 [[ 0.06980073  0.34745061]

[ 0.58658588  0.04126799]

[ 0.91785896  0.36349642]]

計算矩陣對應的行列式: -38.0

計算逆矩陣 [[-0.5        -0.5        -0.5       ]

[ 0.15789474  0.05263158  0.21052632]

[ 0.39473684  0.13157895  0.02631579]]

逆矩陣驗證 [[  1.00000000e+00   1.00000001e-08   9.99999997e-09]

[ -2.00000001e-08   9.99999990e-01  -2.99999999e-08]

[  2.00000001e-08   0.00000000e+00   1.00000002e+00]]

cholesky分解 [[ 1.  0.  0.]

[ 0.  1.  0.]

[ 0.  0.  1.]]

特徵值和特徵向量 (array([-10.65907521,  -0.22750691,   2.88658212]), array([[ 0.21749542,  0.63250104, -0.74339638],

[ 0.84526515,  0.2587998 ,  0.46749277],

[-0.4880805 ,  0.73004459,  0.47834331]]))

tensorflow如何使用 訓練模型

首先檢測 存在 tpu tf.distribute.cluster resolver.tpuclusterresolver 如果先前設定好了 環境變數,不需要再給引數 tpu的返回值為 則檢測到了 tf.config.experimental connect to cluster tpu tf.tp...

tensorflow 如何控制使用cpu數量

tensorflow讀取資料有時候非常占用資源,針對這一情況,我們可以通過控制程式使用cpu的數量來限制 步驟如下 1 bashrc 中修改指定個數 export cpu num 22 python 中在需要執行的程式前加入如下配置 cpu num int os.environ.get cpu nu...

numpy使用fromstring建立矩陣

使用字串建立矩陣是乙個很實用的功能,之前自己嘗試了很多次的小功能使用這個方法就能夠簡單實現。建立長度為16的字串,是為了方便能夠在各種資料型別之間轉換。s mytestfromstring len s 16 這個功能其實是比較讓我興奮的乙個小功能,因為這個簡單的轉換實現了ascii碼的轉換 np.f...