【问题标题】:when do we not need activation function?我们什么时候不需要激活函数?
【发布时间】:2020-10-19 19:25:17
【问题描述】:

我写了一个非常基本的张量流模型,我想预测一个数字:

import tensorflow as tf
import numpy as np


def HW_numbers(x):
    y = (2 * x) + 1
    return y

x = np.array([1.0,2.0,3.0,4.0,5.0,6.0,7.0], dtype=float)
y = np.array(HW_numbers(x))

model = tf.keras.models.Sequential([tf.keras.layers.Dense(units=1,input_shape=[1])])
model.compile(optimizer='sgd',loss='mean_squared_error')
model.fit(x,y,epochs = 30)

print(model.predict([10.0])) 

上面的代码工作正常。但是如果我在 Dense 层中添加一个激活函数,预测就会变得很奇怪。我试过'relu'、'sigmoid'、'tanh'等。

我的问题是,为什么会这样?激活函数究竟在搞乱预测的那个单层中做了什么? 我用过 TensorFlow 2.0

【问题讨论】:

    标签: python tensorflow machine-learning neural-network activation-function


    【解决方案1】:

    目前,您正在学习线性函数。由于它可以用单个神经元来描述,因此您只需要一个神经元来学习该功能。另一方面activation function是:

    学习并理解输入和响应变量之间真正复杂的非线性复杂函数映射。它为我们的网络引入了非线性属性。它们的主要目的是将 A-NN 中节点的输入信号转换为输出信号。该输出信号现在用作堆栈中下一层的输入。

    因此,由于这里只有一个神经元(特定情况),您不需要将值传递到下一层。换句话说,所有隐藏层、输入层和输出层都合并在一起。因此,激活函数对您的情况没有帮助。除非你想根据神经元的输出做出决定。

    【讨论】:

      【解决方案2】:

      您的网络仅包含一个神经元。所以它在没有激活函数的情况下所做的就是将你的输入乘以神经元的权重。这个权重最终会收敛到 2.1 左右。

      • 但是使用 relu 作为激活函数,只有正数会通过您的网络传播。所以如果你的神经元的权重用负数初始化,你总是会得到零作为输出。因此,使用 relu,您有 50:50 的机会获得好结果。
      • 使用激活函数 tanhsigmoid,神经元的输出分别被限制在 [-1,1] 和 [0, 1],所以你的输出不能超过一个。

      所以对于这么小的神经网络,这些激活函数是不匹配问题的。

      【讨论】:

        猜你喜欢
        • 2011-09-20
        • 1970-01-01
        • 2019-07-17
        • 2016-01-25
        • 1970-01-01
        • 2014-04-24
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多