TensorFlow 中的 Heaviside(单元步骤)激活

Posted

技术标签:

【中文标题】TensorFlow 中的 Heaviside(单元步骤)激活【英文标题】:Heaviside (unit step) activation in TensorFlow 【发布时间】:2020-04-17 02:24:50 【问题描述】:

我需要在 TensorFlow 中实现感知器,但是,在 TensorFlow 中似乎不提供重载(单位步骤)激活。它不在tf.,不在tf.nn.,不在tf.keras.activations.。我猜是因为 TensorFlow 是基于梯度的库,而重质激活没有梯度。

我想知道为什么没有这个基本功能。有什么解决方法吗?做一个感知器。

【问题讨论】:

【参考方案1】:

TensorFlow 没有 heaviside (unit step) 激活函数可能是因为 TF 是基于梯度的库,而 heaviside 没有梯度。我必须使用装饰器 @tf.custom_gradient 实现我自己的重载:

#Heaviside (Unit Step) function with grad
@tf.custom_gradient
def heaviside(X):
  List = [];

  for I in range(BSIZE):
    Item = tf.cond(X[I]<0, lambda: tf.constant([0], tf.float32), 
                           lambda: tf.constant([1], tf.float32));  
    List.append(Item);

  U = tf.stack(List);

  #Heaviside half-maximum formula
  #U = (tf.sign(X)+1)/2;

  #Div is differentiation intermediate value
  def grad(Div):
    return Div*1; #Heaviside has no gradient, use 1.

  return U,grad;

【讨论】:

如何实现 BSIZE? @user23657 任何整数值,假设你有 1000 个样本,将整个 epoch 作为批处理,因此 BSIZE=1000,反正它不需要太多 RAM

以上是关于TensorFlow 中的 Heaviside(单元步骤)激活的主要内容,如果未能解决你的问题,请参考以下文章

使用tensorflow实现机器学习中的线性拟合

单变量线性回归:TensorFlow 实战(实战篇)

单变量线性回归:TensorFlow 实战(理论篇)

Keras/Tensorflow:单输出的组合损失函数

Tensorflow1 和 Tensorflow2 中的批处理

Tensorflow之单变量线性回归问题的解决方法