Я хотел бы обучить разреженный автоматический кодировщик с некоторым параметром разреженности, основанным на KL-дивергенции. До сих пор мне удалось только нормализовать по норме L1 или L2, добавив
activity_regularizer = regularizer_l1(0.5)
в layer_dense () в интерфейсе Keras для R. Как добавить штраф KL для параметра разреженности rho?
примечания: https://web.stanford.edu/class/cs294a/sparseAutoencoder.pdf
Теперь мой код выглядит так:
sparse_AE <- keras_model_sequential()
sparse_AE %>%
layer_dense(units = ncol(x_train), activation = "sigmoid", input_shape = ncol(x_train), activity_regularizer = regularizer_l1(0.5)) %>%
layer_dense(units = 100, activation = "sigmoid", activity_regularizer = regularizer_l1(0.5), name = "bottleneck") %>%
layer_dense(units = ncol(x_train), activation = "sigmoid", activity_regularizer = regularizer_l1(0.5)) %>%
layer_dense(units = ncol(x_train))
sparse_AE %>% compile(
loss = "mean_squared_error",
optimizer = "adam"
)
sparse_AE %>% fit(
x = x_train,
y = x_train,
epochs = 500,
verbose = 0
)