如何在 R 中的 Keras 输出层中使用不同的激活

How to use different activations in output layer in Keras in R

我想在 R 的 Keras 接口的输出层中组合更多类型的激活。另外,我想对不同的输出使用不同的损失函数。可以说我想让前两个神经元与 MSE 损失成线性关系,第二个 2 个神经元 sigmoid 与 BCE 损失和最后一个输出将是 relu 与 MAE 损失。到目前为止,我有这个但它不起作用:

model <- keras_model_sequential()

model %>% layer_dense(units=120, activation="selu", 
           input_shape=dim(X)[2]) # this is hidden layer, this works fine

model %>% layer_dense(units=120, activation=as.list(c(rep("linear",2), 
            rep("sigmoid",2), "relu"))) # output layer which is not working

model %>% compile(loss=as.list(c(rep("mean_squared_error",2), 
             rep("binary_crossentropy",2), "mean_absolute_error")), # problem here ?
             optimizer=optimizer_adam(lr=0.001) ,metrics = "mae")

然后我用 model %>% fit(...) 拟合模型。

错误如下:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: When passing a list as loss, it should have one entry per model outputs. 
  The model has 1 outputs, but you passed loss=['mean_squared_error', 'mean_squared_error', ...

感谢任何帮助。

EDIT :仅重写代码以便更好地阅读。

我认为如果你想有多个输出你需要使用功能(也就是说,不是顺序)API - 在这里看一些例子: https://keras.rstudio.com/articles/functional_api.html