在神經網絡中,激活是由一個函數或層應用的?

我使用TensorFlow/Keras的函數API來構建CNN模型。在這個模型中,我試圖在輸出層上應用自定義激活(帶有約束)。

在閱讀了各種資源(1,2)之后,我對是否需要通過簡單的python函數或層應用激活感到困惑。

我嘗試通過如下子類化Layer類來實現它,

class MapToBounds(layers.Layer):

    def __init__(self, lower_bound, upper_bound, **kwargs):
        super().__init__(**kwargs)
        self.lower_bound = lower_bound
        self.upper_bound = upper_bound

    def call(self, inputs, *args, **kwargs):
        return tf.add(self.lower_bound, tf.multiply(tf.sigmoid(inputs), self.upper_bound))
    

并在模型中稱之為

x = MapToBounds(lower_bound=-3.0, upper_bound=20.0)(x)

其中x是前一層實例。

我的問題是:

  1. 這是正確的方法嗎?
  2. 在這種方法中,我必須設置training=False嗎?
  3. 有什么簡單的方法可以用python函數而不是層來實現它嗎?
? 最佳回答:

你的方法實際上相當干凈。您也可以直接在張量上使用tf.add,但自定義層更優雅(IMO):

import tensorflow as tf

lower_bound=-3.0
upper_bound=20.0

inputs = tf.keras.layers.Input((5, ))
x = tf.keras.layers.Dense(20)(inputs)
outputs = tf.add(lower_bound, tf.multiply(tf.sigmoid(x), upper_bound))
model = tf.keras.Model(inputs, outputs)

model.summary()

結論:兩種解決方案均有效。關于標志training=False,我認為你不必擔心它,除非你希望你的激活函數在訓練和推理過程中表現不同。

主站蜘蛛池模板: 国内精品视频一区二区三区八戒 | 无码av中文一区二区三区桃花岛| 国产日本亚洲一区二区三区| 最美女人体内射精一区二区| A国产一区二区免费入口| 成人无码AV一区二区| 久久无码AV一区二区三区| 日韩一区二区视频| 中文字幕日韩一区二区三区不| 一本AV高清一区二区三区| 福利在线一区二区| 一区二区无码免费视频网站| 精品国产一区二区三区不卡| 国产视频福利一区| 无码精品不卡一区二区三区| 伦理一区二区三区| 最美女人体内射精一区二区| 在线电影一区二区| 日本一区二区三区在线观看视频 | 国产精品被窝福利一区| 精品国产一区二区三区四区| 国产午夜精品一区二区三区漫画| 国语对白一区二区三区| 亚洲一区二区三区高清不卡 | 福利片福利一区二区三区| 国产精品香蕉一区二区三区| 一区二区三区国产精品| 久久国产一区二区| 亚洲AV无码第一区二区三区| 激情内射亚洲一区二区三区爱妻| 久久精品综合一区二区三区| 国产精品免费大片一区二区| 视频在线观看一区二区三区| 一区二区三区内射美女毛片| 美女免费视频一区二区| 国产精品无码AV一区二区三区 | 国产亚洲一区二区精品| 中文字幕一区二区三区5566| 91亚洲一区二区在线观看不卡| 国产精品一区二区不卡| 国产嫖妓一区二区三区无码|