5

我正在关注官方 TensorFlow with Keras 教程,但我被困在这里:预测房价:回归 - 创建模型

为什么要在预测连续值的任务中使用激活函数?

代码是:

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
4

1 回答 1

8

在隐藏层中使用非线性激活函数的一般原因是,没有它们,无论有多少层或每层有多少个单元,网络都会像一个简单的线性单元一样运行。Andrew Ng 的这个简短视频很好地解释了这一点:为什么需要非线性激活函数?

在您的情况下,仔细观察,您会发现最后一层的激活函数不是relu隐藏层中的,而是线性的(当您没有指定任何内容时,这是默认激活,就像这里) :

keras.layers.Dense(1)

来自Keras 文档

稠密

[...]

论据

[...]

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

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

于 2018-07-20T12:37:00.030 回答