Когда я внедряю вариационный автоэнкодер, используя R или Keras и т. Д., Я делаю некоторую z-нормализацию для моих входных данных поезда (конечно, по столбцам).А функция активации каждого слоя и гиперпараметры задаются следующим образом.
batch_size <- 1
original_dim <- 10
latent_dim <- 2L
intermediate_dim <- 5L
epochs <- 50L
epsilon_std <- 2
x <- layer_input(shape = c(original_dim))
h <- layer_dense(x, intermediate_dim, activation = "linear")
z_mean <- layer_dense(h, latent_dim)
z_log_var <- layer_dense(h, latent_dim)
sampling <- function(arg){
z_mean <- arg[, 1:(latent_dim)]
z_log_var <- arg[, (latent_dim + 1):(2 * latent_dim)]
epsilon <- k_random_normal(
shape = c(k_shape(z_mean)[[1]]),
mean=0.,
stddev=epsilon_std
)
z_mean + k_exp(z_log_var/2)*epsilon
}
z <- layer_concatenate(list(z_mean, z_log_var)) %>%
layer_lambda(sampling)
decoder_h <- layer_dense(units = intermediate_dim, activation = "linear")
decoder_mean <- layer_dense(units = original_dim, activation = "linear")
h_decoded <- decoder_h(z)
x_decoded_mean <- decoder_mean(h_decoded)
vae <- keras_model(x, x_decoded_mean)
optimizer_sgd(lr = 0.01, momentum = 0.01, decay = 0.001)
vae %>% compile(optimizer = "sgd", loss = 'mean_squared_error', metrics = c('mse'))
vae %>% fit(
x_train, x_train,
shuffle = TRUE,
epochs = 200,
batch_size = 1,
validation_data = list(x_test, x_test),
verbose = 1
)
И после фазы обучения, есть только выходные значения «внешности» [-1,1], даже любые гиперпараметры.
![enter image description here](https://i.stack.imgur.com/2ShO6.png)
Итак, мои вопросы: 1. Если я хочу тренировать свою вей, я должен выполнить нормализацию 0-1 или -1-1 для своих входных данных?а не z-нормализация?Я думаю, что в моем случае z-нормализация подходит, потому что мои данные - это не изображение, а реальные данные. 2. Есть ли идеи для обучения автоэнкодеру с действительными данными?
Большое вам спасибо