[英]In Tensorflow, do I need to add new op for "sinc" or "gaussian" activation functions?
您可以使用基本的 TF 操作來實現這兩個功能。 我不建議從數學角度(大量的淺層局部最優)在神經網絡中使用周期性激活函數(或“准周期性” - 在一般函數中具有不斷變化的導數符號),因此我建議不要使用 sinc . 就高斯而言,您可能需要很好地處理初始化。 這種“局部函數”的棘手之處在於它們很快就會變為 0,因此您必須確保在提供訓練數據時,您的神經元激活最初處於“活動”部分。 使用基於點積的方法(如 sigmoid、relu 等)會更容易,因為您所要做的就是處理規模。 對於高斯,你實際上必須確保你的激活是“到位”的。
可以作為激活函數傳遞的 sinc 函數。 有點亂,但有效。
def sinc(x):
atzero = tf.ones_like(x)
atother = tf.divide(tf.sin(x),x)
value = tf.where(tf.equal(x,0), atzero, atother )
return value
高斯:
def gaussian(x):
sq = tf.square(x)
neg = tf.negative(sq)
return tf.exp(neg)
除了上面的 Laine Mikael 的回答之外,我發現這個特殊的 sinc 實現在向后傳遞期間給出了nan
。 這是基於在 numpy 中實現方式的替代方案:
def sinc(x):
x = tf.where(tf.abs(x) < 1e-20, 1e-20 * tf.ones_like(x), x)
return tf.sin(x) / x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.