TensorFlow隱藏操作探索(張量操作和定制模型算法)
1.張量和操作
tensorflow對張量的操作實際上和numpy差不多,不夠有所差距,numpy的數(shù)據(jù)可以隨時被修改,但是tensorflow的數(shù)據(jù)要分情況。
(1).使用tf.Constant()
a = tf.Constant([[1,2,3],[4,5,6]])
這個矩陣就是2*3的矩陣,但是它無法被修改,只能讀取。
除了不能修改,其實和numpy的使用方法
比如查看它的大小也可以用:a.shape
索引方式也一樣,這里不做過得描述
(2).tensorflow提供的數(shù)據(jù)操作函數(shù)
比如加法: a + 10 可以使用函數(shù) tf.add(a, 10);
矩陣的乘法為tf.matmul(),它提供的函數(shù)和numpy都差不多,但是有些不一樣
比如求和.tf.reduce_sum(),求均值為tf.reduce_mean(),求最大值tf.reduce_max();
numpy也可以用于tensorflow中,轉(zhuǎn)換為張量。
(3)類型轉(zhuǎn)換
tensorflow中有個很麻煩的東西,整形+浮點型會失敗,float32和float64相加也會失敗,它不會自動執(zhí)行類型轉(zhuǎn)換,需要你手動操作。
tf.cast()可以用來進(jìn)行轉(zhuǎn)換,比如把a(bǔ)轉(zhuǎn)為float64類型的
tf.cast(a, tf.float64)
(4).變量
tf.Constant無法被改變,固定好深度學(xué)習(xí)的參數(shù)后,可以使用這個類型的變量,但是如果需要對它進(jìn)行訓(xùn)練,則必須要使用tf.Variable
我們對tf.Variable的修改也需要使用特定的函數(shù)assign
a[0,0].assign(10)
這樣a的第一個值就變?yōu)榱?0,這個就相當(dāng)于a[0,0] = 10
麻煩就是這個啦,必須通過相應(yīng)的函數(shù)來操作;
(5).其他數(shù)據(jù)結(jié)構(gòu)
tensorflow還有其他數(shù)據(jù)結(jié)構(gòu),比如稀疏張量(tf.SparseTensor),張量數(shù)組(tf.TensorArrray),不規(guī)則張量(tf.RaggedTensor),字符串張量(tf.string)等等
2.定制模型和算法
(1)自定義損失函數(shù)
比如自定義一個Huber
def huber_fn(y_true, y_pred):`
error = tf.abs(y_true - y_pred);
is_small_error = tf.abs(error) < 1#門限設(shè)置為1
squared_loss = tf.abs(error)-0.5
return tf.where(is_small_error, squared_loss, linear_loss)可以在Keras模型中使用這個函數(shù)
model.compile(loss=huber_fn, opitimizer= 'adam');
(2)保存和加載自定義組件的模型
keras會保存函數(shù)的名字,每次加載的適合需要提供一個字典,將函數(shù)名稱映射到實際函數(shù)。一般而言,當(dāng)加載包含自定義對象的模式時,需要將名稱映射到對象。
model = keras.models.load_model("model.h5", custom_objects = {'huber_fn':huber_fn})
如果需要更為靈活的函數(shù),設(shè)定上面函數(shù)的閾值,不僅僅等于1
def more_freedom_huber(limit = 1.0):
def huber_fn(y_true, y_pred):
error = tf.abs(y_true - y_pred);
is_small_error = tf.abs(error) < 1#門限設(shè)置為1
squared_loss = tf.abs(error)-0.5
return tf.where(is_small_error, squared_loss, linear_loss)
return huber_fn
model = keras.models.load_model("model.h5", custom_objects = {'huber_fn':more_freedom_huber(2.0)})還可以通過繼承keras.losses.Loss類的子類,然后實現(xiàn)get_config()方法來解決問題
比如自定義激活函數(shù),初始化方法,正則化和約束。
如果函數(shù)需要和模型一起保存,必須繼承相應(yīng)的對象,比如keras.regularizers.Regularizer
以上就是TensorFlow隱藏操作探索(張量操作和定制模型算法)的詳細(xì)內(nèi)容,更多關(guān)于TensorFlow張量定制模型算法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python面向?qū)ο髮崿F(xiàn)方法總結(jié)
這篇文章主要介紹了Python面向?qū)ο髮崿F(xiàn)方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
使用 Python 進(jìn)行 Word 郵件合并的實現(xiàn)
本文主要介紹了Python 進(jìn)行 Word 郵件合并的實現(xiàn),通過郵件合并功能,可以將模板文檔與數(shù)據(jù)源結(jié)合,自動生成大量格式統(tǒng)一但內(nèi)容各異的文檔,感興趣的可以了解一下2026-05-05
淺談Python數(shù)據(jù)類型判斷及列表腳本操作
下面小編就為大家?guī)硪黄獪\談Python數(shù)據(jù)類型判斷及列表腳本操作。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11

