gpt4 book ai didi

python - Tensorflow、平方根激活函数实现(整形误差)

转载 作者:行者123 更新时间:2023-12-01 09:00:51 25 4
gpt4 key购买 nike

为了实现分类神经网络,我发现了一些非常有用的教程,例如 this one (2 个隐藏层、one-hot 编码输出、dropout 正则化、归一化等)这帮助我了解了 Tensorflow API 背后的一些学习曲线。然而,通过阅读publication on SQRT activation functions ,并看到积极的反馈,我想在我的神经网络架构中进行实验。

在Tensorflow API中没有找到之后,我查看了如何定义自定义激活函数,发现this stack-overflow solution ,并认为使用 Tensorflow 原语“应该可以”实现。

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

Square root activation function

我插入了这段代码而不是隐藏层 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("Dimensions must be equal, but are 1 and 107 for 'MatMul_2' (op: 'MatMul') with input shapes: [107,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. ]

关于python - Tensorflow、平方根激活函数实现(整形误差),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com