Что мне нужно для изучения автоэнкодера с актуальными значениями (real-values) - PullRequest
0 голосов
/ 26 марта 2019

Когда я внедряю вариационный автоэнкодер, используя 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

Итак, мои вопросы: 1. Если я хочу тренировать свою вей, я должен выполнить нормализацию 0-1 или -1-1 для своих входных данных?а не z-нормализация?Я думаю, что в моем случае z-нормализация подходит, потому что мои данные - это не изображение, а реальные данные. 2. Есть ли идеи для обучения автоэнкодеру с действительными данными?

Большое вам спасибо

...