为什么在神经网络回归中使用ReLU?

时间:2018-07-20 12:21:32

标签: machine-learning neural-network keras regression activation-function

我正在使用带有Keras的官方TensorFlow教程,却被困在这里:Predict house prices: regression - Create the model

为什么激活功能用于预测连续值的任务?

代码是:

def build_model():
    model = keras.Sequential([
        keras.layers.Dense(64, activation=tf.nn.relu, 
                   input_shape=(train_data.shape[1],)),
        keras.layers.Dense(64, activation=tf.nn.relu),
        keras.layers.Dense(1)
    ])

    optimizer = tf.train.RMSPropOptimizer(0.001)

    model.compile(loss='mse', optimizer=optimizer, metrics=['mae'])
    return model

1 个答案:

答案 0 :(得分:3)

隐藏层中使用非线性激活函数的一般原因是,没有它们,无论每层有多少层或有多少个单元,网络的行为都将像简单的线性单元。这在安德鲁·伍(Andrew Ng)的这段短视频中得到了很好的解释:Why do you need non-linear activation functions?

在您的情况下,仔细观察,您会发现最终层的激活功能与隐藏层不同,它不是relu,而是线性的(是您未指定任何内容时的默认激活,例如此处):

keras.layers.Dense(1)

来自Keras docs

  

密集

     

[...]

     

参数

     

[...]

     

激活:要使用的激活功能(请参见activations)。如果您未指定任何内容,则不会应用任何激活(即“线性”激活:a(x) = x)。

这确实是具有单个连续输出的回归网络所期望的。