我正在使用带有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
答案 0 :(得分:3)
在隐藏层中使用非线性激活函数的一般原因是,没有它们,无论每层有多少层或有多少个单元,网络的行为都将像简单的线性单元。这在安德鲁·伍(Andrew Ng)的这段短视频中得到了很好的解释:Why do you need non-linear activation functions?
在您的情况下,仔细观察,您会发现最终层的激活功能与隐藏层不同,它不是relu
,而是线性的(是您未指定任何内容时的默认激活,例如此处):
keras.layers.Dense(1)
来自Keras docs:
密集
[...]
参数
[...]
激活:要使用的激活功能(请参见activations)。如果您未指定任何内容,则不会应用任何激活(即“线性”激活:
a(x) = x
)。
这确实是具有单个连续输出的回归网络所期望的。