Python Tensorflow,平方根激活函数实现(成形误差)

Python Tensorflow,平方根激活函数实现(成形误差),python,python-3.x,tensorflow,activation-function,Python,Python 3.x,Tensorflow,Activation Function,为了实现分类NN,我找到了一些非常有用的教程,比如(2个隐藏层,一个热编码输出,辍学正则化,标准化等),它们帮助我了解了Tensorflow API背后的一些学习曲线。然而,通过阅读,并看到乐观的反馈,我想在我的NN架构中进行实验 在没有在Tensorflow API中创建它之后,我研究了如何定义自定义激活函数,发现并认为使用Tensorflow原语实现它“应该是可能的” 因此,如果SQRT激活函数需要是这样的(请原谅粘贴,看起来比自己打字好): 我插入了此代码,而不是隐藏层ReLU函数: #

为了实现分类NN,我找到了一些非常有用的教程,比如(2个隐藏层,一个热编码输出,辍学正则化,标准化等),它们帮助我了解了Tensorflow API背后的一些学习曲线。然而,通过阅读,并看到乐观的反馈,我想在我的NN架构中进行实验

在没有在Tensorflow API中创建它之后,我研究了如何定义自定义激活函数,发现并认为使用Tensorflow原语实现它“应该是可能的”

因此,如果SQRT激活函数需要是这样的(请原谅粘贴,看起来比自己打字好):

我插入了此代码,而不是隐藏层ReLU函数:

# ==== old activation function
# b = bias value x bias weight
# inputs = x data 
# w = weights
y = tf.nn.relu( tf.add( tf.matmul(w, tf.transpose(inputs)), b))

# ===== new act function
net = tf.cast( tf.add( tf.matmul(w, tf.transpose(inputs)), b), tf.float32)  # net input to activation function
cond = tf.greater_equal(net, tf.constant(0.0, dtype=tf.float32))            # >= condition
condTrue = tf.sqrt(net)                                   # if True
minOne = tf.constant(-1.0, shape=(N,1) dtype=tf.float32)  # -1 constant value
condFalse = tf.matmul(minOne, tf.sqrt( tf.abs(net)))      # if False
y = tf.cond(cond, lambda: condTrue, lambda: condFalse)    # act. function output 
但是如果我尝试运行此代码,我会得到一个成形错误:

ValueError(“尺寸必须相等,但对于输入形状为[107,1]、[107]、[107]、”的“MatMul_2”(op:'MatMul'),尺寸为1和107”)

有人能看一下代码片段并告诉我我的方法是否正确吗?除了说明输入之间的秩问题的错误之外,我怀疑我更大的问题仍然是理解和理解基于矩阵的tensorflow操作符

在所有的乘法、加法和转置之间,我不知道张量的基本数据形状必须是什么。我的代码是否正确定义了预期的激活功能(以及背部道具的衍生产品呢?),如果没有,请描述我哪里出了问题,以及我是如何出错的


如果您有任何帮助,我将不胜感激。我希望更好地理解这个问题(因为我仍在学习API)

您可以使用更简单的逻辑来实现激活功能:

x = tf.constant([ -4, 4, -2, 2, 0], tf.float32)
act = tf.sign(x)* tf.sqrt(tf.abs(x))

with tf.Session() as sess:
   print(sess.run(act))

#[-2.  2. -1.4142135 1.4142135 0. ]

竖起大拇指!。谢谢你的建议(我不知道信号操作员),很高兴它现在可以工作了。我想在某个时候理解我的矩阵数学问题,但肯定有足够多的速成课程材料可以找到