tensorflow之自定義神經(jīng)網(wǎng)絡層實例
如下所示:
import tensorflow as tf tfe = tf.contrib.eager tf.enable_eager_execution()
大多數(shù)情況下,在為機器學習模型編寫代碼時,您希望在比單個操作和單個變量操作更高的抽象級別上操作。
1.關(guān)于圖層的一些有用操作
許多機器學習模型可以表達為相對簡單的圖層的組合和堆疊,TensorFlow提供了一組許多常用圖層,以及您從頭開始或作為組合創(chuàng)建自己的應用程序特定圖層的簡單方法。TensorFlow在tf.keras包中包含完整的Keras API,而Keras層在構(gòu)建自己的模型時非常有用。
#在tf.keras.layers包中,圖層是對象。要構(gòu)造一個圖層,只需構(gòu)造一個對象。大多數(shù)層將輸出維度/通道的數(shù)量作為第一個參數(shù)。 layer=tf.keras.layers.Dense(100) #輸入維度的數(shù)量通常是不必要的,因為它可以在第一次使用圖層時推斷出來,但如果您想手動指定它,則可以提供它,這在某些復雜模型中很有用。 layer=tf.keras.layers.Dense(10,input_shape=(None,5)) #調(diào)用層 layer(tf.zeros([10,5])) #圖層有許多有用的方法。例如,您可以通過調(diào)用layer.variables來檢查圖層中的所有變量。在這種情況下,完全連接的層將具有權(quán)重和偏差的變量。 variable=layer.variables # variable[0] layer.kernel.numpy() layer.bias
2.自定義圖層
實現(xiàn)自己的層的最佳方法是擴展tf.keras.Layer類并實現(xiàn):
__init__,您可以在其中執(zhí)行所有與輸入無關(guān)的初始化
build方法,您知道輸入張量的形狀,并可以進行其余的初始化
call方法,在這里進行正向傳播計算
請注意,您不必等到調(diào)用build來創(chuàng)建變量,您也可以在__init__中創(chuàng)建它們。但是,在build中創(chuàng)建它們的優(yōu)點是它可以根據(jù)圖層將要操作的輸入的形狀啟用后期變量創(chuàng)建。另一方面,在__init__中創(chuàng)建變量意味著需要明確指定創(chuàng)建變量所需的形狀。
class MyDenseLayer(tf.keras.layers.Layer): def __init__(self, num_outputs): super(MyDenseLayer, self).__init__() self.num_outputs = num_outputs def build(self, input_shape): self.kernel = self.add_variable("kernel", shape=[input_shape[-1].value, self.num_outputs]) def call(self, input): return tf.matmul(input, self.kernel) layer = MyDenseLayer(10) print(layer(tf.zeros([10, 5]))) print(layer.variables)
3.搭建網(wǎng)絡結(jié)構(gòu)
機器學習模型中許多有趣的圖層是通過組合現(xiàn)有層來實現(xiàn)的。例如,resnet中的每個residual塊是卷積,批量標準化等的組合。
創(chuàng)建包含其他圖層的類似圖層的東西時使用的主類是tf.keras.Model。實現(xiàn)一個是通過繼承自tf.keras.Model完成的。
class ResnetIdentityBlock(tf.keras.Model): def __init__(self, kernel_size, filters): super(ResnetIdentityBlock, self).__init__(name='') filters1, filters2, filters3 = filters self.conv2a = tf.keras.layers.Conv2D(filters1, (1, 1)) self.bn2a = tf.keras.layers.BatchNormalization() self.conv2b = tf.keras.layers.Conv2D(filters2, kernel_size, padding='same') self.bn2b = tf.keras.layers.BatchNormalization() self.conv2c = tf.keras.layers.Conv2D(filters3, (1, 1)) self.bn2c = tf.keras.layers.BatchNormalization() def call(self, input_tensor, training=False): x = self.conv2a(input_tensor) x = self.bn2a(x, training=training) x = tf.nn.relu(x) x = self.conv2b(x) x = self.bn2b(x, training=training) x = tf.nn.relu(x) x = self.conv2c(x) x = self.bn2c(x, training=training) x += input_tensor return tf.nn.relu(x) block = ResnetIdentityBlock(1, [1, 2, 3]) print(block(tf.zeros([1, 2, 3, 3]))) print([x.name for x in block.variables])
以上這篇tensorflow之自定義神經(jīng)網(wǎng)絡層實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實現(xiàn)提取圖片中顏色并繪制成可視化圖表
今天小編來為大家分享一個有趣的可視化技巧,就是如何利用Python語言實現(xiàn)從圖片中提取顏色然后繪制成可視化圖表,感興趣的可以嘗試一下2022-07-07淺談Python中進程的創(chuàng)建與結(jié)束
這篇文章主要介紹了淺談Python中進程的創(chuàng)建與結(jié)束,但凡是硬件,都需要有操作系統(tǒng)去管理,只要有操作系統(tǒng),就有進程的概念,就需要有創(chuàng)建進程的方式,需要的朋友可以參考下2023-07-07Django 后臺帶有字典的列表數(shù)據(jù)與頁面js交互實例
這篇文章主要介紹了Django 后臺帶有字典的列表數(shù)據(jù)與頁面js交互實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python實現(xiàn)動態(tài)添加類的屬性或成員函數(shù)的解決方法
這篇文章主要介紹了Python實現(xiàn)動態(tài)添加類的屬性或成員函數(shù)的解決方法,在類似插件開發(fā)的時候會比較有用,需要的朋友可以參考下2014-07-07