<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【小白學PyTorch】18.TF2構(gòu)建自定義模型

          共 4159字,需瀏覽 9分鐘

           ·

          2020-10-06 10:00

          【機器學習煉丹術(shù)】的學習筆記分享
          <<小白學PyTorch>>

          擴展之Tensorflow2.0?| 17 TFrec文件的創(chuàng)建與讀取

          擴展之Tensorflow2.0?| 16 TF2讀取圖片的方法

          擴展之Tensorflow2.0?| 15 TF2實現(xiàn)一個簡單的服裝分類任務(wù)

          小白學PyTorch | 14 tensorboardX可視化教程

          小白學PyTorch | 13 EfficientNet詳解及PyTorch實現(xiàn)

          小白學PyTorch | 12 SENet詳解及PyTorch實現(xiàn)

          小白學PyTorch | 11 MobileNet詳解及PyTorch實現(xiàn)

          小白學PyTorch | 10 pytorch常見運算詳解

          小白學PyTorch | 9 tensor數(shù)據(jù)結(jié)構(gòu)與存儲結(jié)構(gòu)

          小白學PyTorch | 8 實戰(zhàn)之MNIST小試牛刀

          小白學PyTorch | 7 最新版本torchvision.transforms常用API翻譯與講解

          小白學PyTorch | 6 模型的構(gòu)建訪問遍歷存儲(附代碼)

          小白學PyTorch | 5 torchvision預(yù)訓練模型與數(shù)據(jù)集全覽

          小白學PyTorch | 4 構(gòu)建模型三要素與權(quán)重初始化

          小白學PyTorch | 3 淺談Dataset和Dataloader

          小白學PyTorch | 2 淺談訓練集驗證集和測試集

          小白學PyTorch | 1 搭建一個超簡單的網(wǎng)絡(luò)

          小白學PyTorch | 動態(tài)圖與靜態(tài)圖的淺顯理解

          參考目錄:

          • 1 創(chuàng)建自定義網(wǎng)絡(luò)層

          • 2 創(chuàng)建一個完整的CNN

            • 2.1 keras.Model vs keras.layers.Layer


          之前講過了如何用tensorflow構(gòu)建數(shù)據(jù)集,然后這一節(jié)課講解如何用Tensorflow2.0來創(chuàng)建模型。

          TF2.0中創(chuàng)建模型的API基本上都放到了它的Keras中了,Keras可以理解為TF的高級API,里面封裝了很多的常見網(wǎng)絡(luò)層、常見損失函數(shù)等。后續(xù)會詳細介紹keras的全面功能,本篇文章講解如何構(gòu)建模型。

          1 創(chuàng)建自定義網(wǎng)絡(luò)層

          import?tensorflow?as?tf
          import?tensorflow.keras?as?keras

          class?MyLayer(keras.layers.Layer):
          ????def?__init__(self,?input_dim=32,?output_dim=32):
          ????????super(MyLayer,?self).__init__()

          ????????w_init?=?tf.random_normal_initializer()
          ????????self.weight?=?tf.Variable(
          ????????????initial_value=w_init(shape=(input_dim,?output_dim),?dtype=tf.float32),
          ????????????trainable=True)?#?如果是false則是不參與梯度下降的變量

          ????????b_init?=?tf.zeros_initializer()
          ????????self.bias?=?tf.Variable(initial_value=b_init(
          ????????????shape=(output_dim),?dtype=tf.float32),?trainable=True)

          ????def?call(self,?inputs):
          ????????return?tf.matmul(inputs,?self.weight)?+?self.bias


          x?=?tf.ones((3,5))
          my_layer?=?MyLayer(input_dim=5,
          ???????????????????output_dim=10)
          out?=?my_layer(x)
          print(out.shape)
          >>>?(3,?10)

          這個就是定義了一個TF的網(wǎng)絡(luò)層,其實可以看出來和PyTorch定義的方式非常的類似:

          • 這個類要繼承tf.keras.layers.Layer,這個pytorch中要繼承torch.nn.Module類似;
          • 網(wǎng)絡(luò)層的組件在__def__中定義,和pytorch的模型類相同;
          • call()和pytorch中的forward()的類似。

          上面代碼中實現(xiàn)的是一個全連接層的定義,其中可以看到使用tf.random_normal_initializer()來作為參數(shù)的初始化器,然后用tf.Variable來產(chǎn)生網(wǎng)絡(luò)層中的權(quán)重變量,通過trainable=True這個參數(shù)說明這個權(quán)重變量是一個參與梯度下降的可以訓練的變量。

          我通過tf.ones((3,5))產(chǎn)生一個shape為[3,5]的一個全是1的張量,這里面第一維度的3表示有3個樣本,第二維度的5就是表示要放入全連接層的數(shù)據(jù)(全連接層的輸入是5個神經(jīng)元);然后設(shè)置的全連接層的輸出神經(jīng)元數(shù)量是10,所以最后的輸出是(3,10)。

          2 創(chuàng)建一個完整的CNN

          import?tensorflow?as?tf
          import?tensorflow.keras?as?keras

          class?CBR(keras.layers.Layer):
          ????def?__init__(self,output_dim):
          ????????super(CBR,self).__init__()
          ????????self.conv?=?keras.layers.Conv2D(filters=output_dim,?kernel_size=4,?padding='same',?strides=1)
          ????????self.bn?=?keras.layers.BatchNormalization(axis=3)
          ????????self.ReLU?=?keras.layers.ReLU()

          ????def?call(self,?inputs):
          ????????inputs?=?self.conv(inputs)
          ????????inputs?=?self.ReLU(self.bn(inputs))
          ????????return?inputs

          class?MyNet(keras.Model):
          ????def?__init__?(self,input_dim=3):
          ????????super(MyNet,self).__init__()
          ????????self.cbr1?=?CBR(16)
          ????????self.maxpool1?=?keras.layers.MaxPool2D(pool_size=(2,2))
          ????????self.cbr2?=?CBR(32)
          ????????self.maxpool2?=?keras.layers.MaxPool2D(pool_size=(2,2))

          ????def?call(self,?inputs):
          ????????inputs?=?self.maxpool1(self.cbr1(inputs))
          ????????inputs?=?self.maxpool2(self.cbr2(inputs))
          ????????return?inputs

          model?=?MyNet(3)
          data?=?tf.random.normal((16,224,224,3))
          output?=?model(data)
          print(output.shape)
          >>>?(16,?56,?56,?32)

          這個是構(gòu)建了一個非常簡單的卷積網(wǎng)絡(luò),結(jié)構(gòu)是常見的:卷積層+BN層+ReLU層。可以發(fā)現(xiàn)這里繼承的一個tf.keras.Model這個類。

          2.1 keras.Model vs keras.layers.Layer

          Model比Layer的功能更多,反過來說,Layer的功能更精簡專一。

          • Layer:僅僅用作張量的操作,輸入一個張量,輸出也要求是一個張量,對張量的操作都可以用Layer來封裝;
          • Model:一個更加復(fù)雜的結(jié)構(gòu),由多個Layer組成。 Model的話,可以使用.fit(),.evaluate().predict()等方法來快速訓練。保存和加載模型也是在Model這個級別進行的。

          現(xiàn)在說一說上面的代碼和pytorch中的區(qū)別,作為一個對比學習、也作為一個對pytorch的回顧:

          • 卷積層Conv2D中,Keras中不用輸入輸入的通道數(shù),filters就是卷積后的輸出特征圖的通道數(shù);而PyTorch的卷積層是需要輸入兩個通道數(shù)的參數(shù),一個是輸入特征圖的通道數(shù),一個是輸出特征圖的通道數(shù);
          • keras.layers.BatchNormalization(axis=3)是BN層,這里的axis=3說明第三個維度(從0開始計數(shù))是通道數(shù),是需要作為批歸一化的維度(這個了解BN算法的朋友應(yīng)該可以理解吧,不了解的話去重新看我之前剖析BN層算法的那個文章吧,在文章末尾有相關(guān)鏈接)。pytorch的圖像的四個維度是:

          而tensorflow是:

          總之,學了pytorch之后,再看keras的話,對照的keras的API,很多東西都直接就會了,兩者的API越來越相似了。

          上面最后輸出是(16, 56, 56, 32),輸入的是的維度,然后經(jīng)過兩個最大池化層,就變成了了。

          到此為止,我們現(xiàn)在應(yīng)該是可以用keras來構(gòu)建模型了。

          - END -



          往期精彩回顧





          獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:

          https://t.zsxq.com/662nyZF

          本站qq群704220115。

          加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):


          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一区二区电影网 | 欧美精品第一页 | 99这里只有精品 | 天天操天天干天天爱 | 夜夜躁狠狠躁日日躁视频 |