Profesor: Felipe González

Elaborado por Daniela Pinto Veizaga

Parte 1: descenso en gradiente

Resolveremos un problema de minimización usando descenso en gradiente. Considera la siguiente función

library(tidyverse)
h <- function(x) {
  w <- x - 4
  (1/50) * (w^4 + w^2 + 100 * w)
}

Pregunta. grafica la función h. ¿Dónde está el mínimo? ¿Cuál es el valor que toma la función en el mínimo?

x <- c(-100:100)
h_x<- tibble(h(x),x)
h_x
h_x<- tibble(h(x),x)
ggplot(h_x) + geom_line(aes(x=x, y=h(x))) + labs(title = 'Función h')

print(paste0('El valor mínimo está en x=1, en ese punto, la función h_x() toma el siguiente valor: ', min(h_x$`h(x)`)))
[1] "El valor mínimo está en x=1, en ese punto, la función h_x() toma el siguiente valor: -4.2"

Pregunta: Ahora calcula la derivada en la siguiente función (rellena):

# calcula la derivada
h_deriv <- function(x) {
  # aquí tu calculo, debe regresar la derivada de h 
  # evaluada en x
  w <- x - 4
  deriv <- (1/25) * (2*(w**3) + w + 50)
  #deriv <- (4*(x-4)^3 + 2*(x-4) +100)*1/150
  deriv
}

Usaremos el código de la clase anterior:

# función para descenso
descenso <- function(n, z_0, eta, h_deriv){
  z <- matrix(0,n, length(z_0))
  z[1, ] <- z_0
  for(i in 1:(n-1)){
    # paso de descenso
    z[i+1, ] <- z[i, ] - eta * h_deriv(z[i, ])
  }
  z
}

Pregunta: Empezamos las iteraciones en 0. En el siguiente código, escoge un tamaño de paso (\(eta\)) demasiado grande (diverge), demasiado chico (tarda mucho en converger) y uno intermedio donde alcances el mínimo en un número de iteraciones razonable. Puede ser necesario que ajustes el número de iteraciones, y puede ser que obtengas desbordes si pones tamaños de paso demasiado grandes:

# pon un valor grande y uno chico para eta. ¿Qué pasa?
z_0 <- 0

for (i in c(0.001, 0.01, 0.1, 0.3, 0.345, 1)){
  eta <- i 
  name = paste('Learning rate',i,sep=" ")

  z <- descenso(100, z_0, eta, h_deriv)

  #Grafica las iteraciones
  dat_iteraciones <- tibble(iteracion = 1:nrow(z), 
                          x = z[, 1], y = h(z[, 1]))
  p<-ggplot(dat_iteraciones, aes(x = iteracion, y = x)) + geom_point() + geom_line()+ ggtitle(name)
  assign(paste0("plot", i), p)

}
library(cowplot)
plot_grid(plot0.001, plot0.01, plot0.1, plot0.3, plot0.345, plot1,
          labels = 'AUTO', label_fontfamily = "serif", label_fontface = "plain",
          label_colour = "black", ncol = 2)

Parte 2: descenso en gradiente para regresión

Pregunta: en el siguiente ejercicio ajustamos un modelo de regresión para el problema de precio de casas que vimos en clase. Escoge

  1. Un número de iteraciones y tamaño de paso adecuados para encontrar los coeficientes,
  2. ¿Qué pasa si pones un tamaño de paso muy chico? ¿Qué pasa si pones un tamaño de paso demasiado grande?

Cargamos los datos:

casas_receta <- read_rds("casas_receta.rds")
x_ent <- casas_receta %>% prep %>% juice %>% select(tiene_piso_2, calidad) %>% as.matrix()
y_ent <- casas_receta %>% prep %>% juice %>% pull(precio_m2_miles)

Pregunta: qué contienen x_ent y y_ent?

x_ent %>% summary
  tiene_piso_2       calidad  
 Min.   :0.0000   Min.   :-5  
 1st Qu.:0.0000   1st Qu.:-1  
 Median :0.0000   Median : 0  
 Mean   :0.4468   Mean   : 0  
 3rd Qu.:1.0000   3rd Qu.: 1  
 Max.   :1.0000   Max.   : 4  

x_ent y y_ent caracterizan a los datos de entrenamiento.

Definimos un modelo de regresión lineal en keras (nota: si quieres hacer corridas desde cero empieza con estas líneas que siguen. De otra manera vas a iterar desde el punto donde te hayas quedado en la corrida anterior):

library(tidyverse)
library(tidymodels)
library(keras)
 # ajusta este valor, es le tamaño de paso o tasa de aprendizaje

casas_receta <- read_rds("casas_receta.rds")
x_ent <- casas_receta %>% prep %>% juice %>% select(tiene_piso_2, calidad) %>% as.matrix()

y_ent <- casas_receta %>% prep %>% juice %>% pull(precio_m2_miles)
   
for (i in c(0.001, 0.01, 0.1, 0.2, 0.3)){   
   i= as.character(i)
   name = paste('logs/run_',i,sep="")
   n_entrena <- nrow(x_ent)
   modelo_casas <- keras_model_sequential() 
   modelo_casas %>%
        layer_dense(units = 1,activation = "linear",
         kernel_initializer = initializer_constant(0),
          bias_initializer = initializer_constant(0))   
   modelo_casas %>% compile(
       loss = "mean_squared_error",  # pérdida cuadrática
        optimizer = optimizer_sgd(lr = lr), # descenso en gradiente
        #metrics = list("mean_squared_error"),
        metrics = c('accuracy')
)
   
   historia <- modelo_casas %>% fit(
      as.matrix(x_ent), # x entradas
      y_ent,            # y salida o target
      batch_size = nrow(x_ent), # para descenso en gradiente
      callbacks = callback_tensorboard(name),
      view_metrics = FALSE,
      epochs = 20 # número de iteraciones
      )
}
Epoch 1/20

1/1 [==============================] - 0s 26us/step - loss: 1.7096 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 4ms/step - loss: 1.7096 - accuracy: 0.0000e+00 
Epoch 2/20

1/1 [==============================] - 0s 13us/step - loss: 0.1943 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1943 - accuracy: 0.0000e+00 
Epoch 3/20

1/1 [==============================] - 0s 12us/step - loss: 0.1473 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1473 - accuracy: 0.0000e+00 
Epoch 4/20

1/1 [==============================] - 0s 14us/step - loss: 0.1179 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1179 - accuracy: 0.0000e+00 
Epoch 5/20

1/1 [==============================] - 0s 11us/step - loss: 0.0976 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0976 - accuracy: 0.0000e+00 
Epoch 6/20

1/1 [==============================] - 0s 11us/step - loss: 0.0832 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0832 - accuracy: 0.0000e+00 
Epoch 7/20

1/1 [==============================] - 0s 11us/step - loss: 0.0729 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0729 - accuracy: 0.0000e+00 
Epoch 8/20

1/1 [==============================] - 0s 14us/step - loss: 0.0655 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0655 - accuracy: 0.0000e+00 
Epoch 9/20

1/1 [==============================] - 0s 10us/step - loss: 0.0602 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0602 - accuracy: 0.0000e+00 
Epoch 10/20

1/1 [==============================] - 0s 10us/step - loss: 0.0564 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0564 - accuracy: 0.0000e+00 
Epoch 11/20

1/1 [==============================] - 0s 11us/step - loss: 0.0537 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0537 - accuracy: 0.0000e+00 
Epoch 12/20

1/1 [==============================] - 0s 10us/step - loss: 0.0517 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0517 - accuracy: 0.0000e+00 
Epoch 13/20

1/1 [==============================] - 0s 10us/step - loss: 0.0503 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0503 - accuracy: 0.0000e+00 
Epoch 14/20

1/1 [==============================] - 0s 11us/step - loss: 0.0493 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0493 - accuracy: 0.0000e+00 
Epoch 15/20

1/1 [==============================] - 0s 11us/step - loss: 0.0486 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0486 - accuracy: 0.0000e+00 
Epoch 16/20

1/1 [==============================] - 0s 10us/step - loss: 0.0481 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0481 - accuracy: 0.0000e+00 
Epoch 17/20

1/1 [==============================] - 0s 10us/step - loss: 0.0477 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0477 - accuracy: 0.0000e+00 
Epoch 18/20

1/1 [==============================] - 0s 10us/step - loss: 0.0474 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0474 - accuracy: 0.0000e+00 
Epoch 19/20

1/1 [==============================] - 0s 10us/step - loss: 0.0472 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0472 - accuracy: 0.0000e+00 
Epoch 20/20

1/1 [==============================] - 0s 10us/step - loss: 0.0471 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0471 - accuracy: 0.0000e+00 
Epoch 1/20

1/1 [==============================] - 0s 17us/step - loss: 1.7096 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 1.7096 - accuracy: 0.0000e+00 
Epoch 2/20

1/1 [==============================] - 0s 11us/step - loss: 0.1943 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1943 - accuracy: 0.0000e+00 
Epoch 3/20

1/1 [==============================] - 0s 11us/step - loss: 0.1473 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.1473 - accuracy: 0.0000e+00 
Epoch 4/20

1/1 [==============================] - 0s 10us/step - loss: 0.1179 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.1179 - accuracy: 0.0000e+00 
Epoch 5/20

1/1 [==============================] - 0s 10us/step - loss: 0.0976 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0976 - accuracy: 0.0000e+00 
Epoch 6/20

1/1 [==============================] - 0s 10us/step - loss: 0.0832 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0832 - accuracy: 0.0000e+00 
Epoch 7/20

1/1 [==============================] - 0s 10us/step - loss: 0.0729 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0729 - accuracy: 0.0000e+00 
Epoch 8/20

1/1 [==============================] - 0s 10us/step - loss: 0.0655 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0655 - accuracy: 0.0000e+00 
Epoch 9/20

1/1 [==============================] - 0s 10us/step - loss: 0.0602 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0602 - accuracy: 0.0000e+00 
Epoch 10/20

1/1 [==============================] - 0s 11us/step - loss: 0.0564 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0564 - accuracy: 0.0000e+00 
Epoch 11/20

1/1 [==============================] - 0s 10us/step - loss: 0.0537 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0537 - accuracy: 0.0000e+00 
Epoch 12/20

1/1 [==============================] - 0s 11us/step - loss: 0.0517 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0517 - accuracy: 0.0000e+00 
Epoch 13/20

1/1 [==============================] - 0s 10us/step - loss: 0.0503 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0503 - accuracy: 0.0000e+00 
Epoch 14/20

1/1 [==============================] - 0s 11us/step - loss: 0.0493 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0493 - accuracy: 0.0000e+00 
Epoch 15/20

1/1 [==============================] - 0s 14us/step - loss: 0.0486 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0486 - accuracy: 0.0000e+00 
Epoch 16/20

1/1 [==============================] - 0s 11us/step - loss: 0.0481 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0481 - accuracy: 0.0000e+00 
Epoch 17/20

1/1 [==============================] - 0s 10us/step - loss: 0.0477 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0477 - accuracy: 0.0000e+00 
Epoch 18/20

1/1 [==============================] - 0s 10us/step - loss: 0.0474 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0474 - accuracy: 0.0000e+00 
Epoch 19/20

1/1 [==============================] - 0s 10us/step - loss: 0.0472 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0472 - accuracy: 0.0000e+00 
Epoch 20/20

1/1 [==============================] - 0s 10us/step - loss: 0.0471 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0471 - accuracy: 0.0000e+00 
Epoch 1/20

1/1 [==============================] - 0s 17us/step - loss: 1.7096 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 1.7096 - accuracy: 0.0000e+00 
Epoch 2/20

1/1 [==============================] - 0s 14us/step - loss: 0.1943 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1943 - accuracy: 0.0000e+00 
Epoch 3/20

1/1 [==============================] - 0s 13us/step - loss: 0.1473 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1473 - accuracy: 0.0000e+00 
Epoch 4/20

1/1 [==============================] - 0s 11us/step - loss: 0.1179 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.1179 - accuracy: 0.0000e+00 
Epoch 5/20

1/1 [==============================] - 0s 10us/step - loss: 0.0976 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0976 - accuracy: 0.0000e+00 
Epoch 6/20

1/1 [==============================] - 0s 11us/step - loss: 0.0832 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0832 - accuracy: 0.0000e+00 
Epoch 7/20

1/1 [==============================] - 0s 10us/step - loss: 0.0729 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 15ms/step - loss: 0.0729 - accuracy: 0.0000e+00
Epoch 8/20

1/1 [==============================] - 0s 15us/step - loss: 0.0655 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0655 - accuracy: 0.0000e+00 
Epoch 9/20

1/1 [==============================] - 0s 23us/step - loss: 0.0602 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 4ms/step - loss: 0.0602 - accuracy: 0.0000e+00 
Epoch 10/20

1/1 [==============================] - 0s 12us/step - loss: 0.0564 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0564 - accuracy: 0.0000e+00 
Epoch 11/20

1/1 [==============================] - 0s 11us/step - loss: 0.0537 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0537 - accuracy: 0.0000e+00 
Epoch 12/20

1/1 [==============================] - 0s 10us/step - loss: 0.0517 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0517 - accuracy: 0.0000e+00 
Epoch 13/20

1/1 [==============================] - 0s 10us/step - loss: 0.0503 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0503 - accuracy: 0.0000e+00 
Epoch 14/20

1/1 [==============================] - 0s 9us/step - loss: 0.0493 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0493 - accuracy: 0.0000e+00
Epoch 15/20

1/1 [==============================] - 0s 9us/step - loss: 0.0486 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0486 - accuracy: 0.0000e+00
Epoch 16/20

1/1 [==============================] - 0s 10us/step - loss: 0.0481 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0481 - accuracy: 0.0000e+00 
Epoch 17/20

1/1 [==============================] - 0s 10us/step - loss: 0.0477 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0477 - accuracy: 0.0000e+00 
Epoch 18/20

1/1 [==============================] - 0s 9us/step - loss: 0.0474 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0474 - accuracy: 0.0000e+00
Epoch 19/20

1/1 [==============================] - 0s 9us/step - loss: 0.0472 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0472 - accuracy: 0.0000e+00
Epoch 20/20

1/1 [==============================] - 0s 9us/step - loss: 0.0471 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0471 - accuracy: 0.0000e+00
Epoch 1/20

1/1 [==============================] - 0s 22us/step - loss: 1.7096 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 1.7096 - accuracy: 0.0000e+00 
Epoch 2/20

1/1 [==============================] - 0s 13us/step - loss: 0.1943 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1943 - accuracy: 0.0000e+00 
Epoch 3/20

1/1 [==============================] - 0s 12us/step - loss: 0.1473 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1473 - accuracy: 0.0000e+00 
Epoch 4/20

1/1 [==============================] - 0s 10us/step - loss: 0.1179 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1179 - accuracy: 0.0000e+00 
Epoch 5/20

1/1 [==============================] - 0s 11us/step - loss: 0.0976 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0976 - accuracy: 0.0000e+00 
Epoch 6/20

1/1 [==============================] - 0s 10us/step - loss: 0.0832 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0832 - accuracy: 0.0000e+00 
Epoch 7/20

1/1 [==============================] - 0s 10us/step - loss: 0.0729 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0729 - accuracy: 0.0000e+00 
Epoch 8/20

1/1 [==============================] - 0s 10us/step - loss: 0.0655 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0655 - accuracy: 0.0000e+00 
Epoch 9/20

1/1 [==============================] - 0s 10us/step - loss: 0.0602 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0602 - accuracy: 0.0000e+00 
Epoch 10/20

1/1 [==============================] - 0s 10us/step - loss: 0.0564 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0564 - accuracy: 0.0000e+00 
Epoch 11/20

1/1 [==============================] - 0s 9us/step - loss: 0.0537 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0537 - accuracy: 0.0000e+00
Epoch 12/20

1/1 [==============================] - 0s 10us/step - loss: 0.0517 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0517 - accuracy: 0.0000e+00 
Epoch 13/20

1/1 [==============================] - 0s 10us/step - loss: 0.0503 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0503 - accuracy: 0.0000e+00 
Epoch 14/20

1/1 [==============================] - 0s 10us/step - loss: 0.0493 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0493 - accuracy: 0.0000e+00 
Epoch 15/20

1/1 [==============================] - 0s 10us/step - loss: 0.0486 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0486 - accuracy: 0.0000e+00 
Epoch 16/20

1/1 [==============================] - 0s 10us/step - loss: 0.0481 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0481 - accuracy: 0.0000e+00 
Epoch 17/20

1/1 [==============================] - 0s 10us/step - loss: 0.0477 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0477 - accuracy: 0.0000e+00 
Epoch 18/20

1/1 [==============================] - 0s 10us/step - loss: 0.0474 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0474 - accuracy: 0.0000e+00 
Epoch 19/20

1/1 [==============================] - 0s 10us/step - loss: 0.0472 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0472 - accuracy: 0.0000e+00 
Epoch 20/20

1/1 [==============================] - 0s 10us/step - loss: 0.0471 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 23ms/step - loss: 0.0471 - accuracy: 0.0000e+00
Epoch 1/20

1/1 [==============================] - 0s 17us/step - loss: 1.7096 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 1.7096 - accuracy: 0.0000e+00 
Epoch 2/20

1/1 [==============================] - 0s 13us/step - loss: 0.1943 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1943 - accuracy: 0.0000e+00 
Epoch 3/20

1/1 [==============================] - 0s 11us/step - loss: 0.1473 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1473 - accuracy: 0.0000e+00 
Epoch 4/20

1/1 [==============================] - 0s 12us/step - loss: 0.1179 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.1179 - accuracy: 0.0000e+00 
Epoch 5/20

1/1 [==============================] - 0s 10us/step - loss: 0.0976 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0976 - accuracy: 0.0000e+00 
Epoch 6/20

1/1 [==============================] - 0s 10us/step - loss: 0.0832 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0832 - accuracy: 0.0000e+00 
Epoch 7/20

1/1 [==============================] - 0s 10us/step - loss: 0.0729 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0729 - accuracy: 0.0000e+00 
Epoch 8/20

1/1 [==============================] - 0s 10us/step - loss: 0.0655 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0655 - accuracy: 0.0000e+00 
Epoch 9/20

1/1 [==============================] - 0s 10us/step - loss: 0.0602 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0602 - accuracy: 0.0000e+00 
Epoch 10/20

1/1 [==============================] - 0s 10us/step - loss: 0.0564 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0564 - accuracy: 0.0000e+00 
Epoch 11/20

1/1 [==============================] - 0s 9us/step - loss: 0.0537 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0537 - accuracy: 0.0000e+00
Epoch 12/20

1/1 [==============================] - 0s 10us/step - loss: 0.0517 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0517 - accuracy: 0.0000e+00 
Epoch 13/20

1/1 [==============================] - 0s 11us/step - loss: 0.0503 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0503 - accuracy: 0.0000e+00 
Epoch 14/20

1/1 [==============================] - 0s 17us/step - loss: 0.0493 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0493 - accuracy: 0.0000e+00 
Epoch 15/20

1/1 [==============================] - 0s 14us/step - loss: 0.0486 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0486 - accuracy: 0.0000e+00 
Epoch 16/20

1/1 [==============================] - 0s 12us/step - loss: 0.0481 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0481 - accuracy: 0.0000e+00 
Epoch 17/20

1/1 [==============================] - 0s 11us/step - loss: 0.0477 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0477 - accuracy: 0.0000e+00 
Epoch 18/20

1/1 [==============================] - 0s 10us/step - loss: 0.0474 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 2ms/step - loss: 0.0474 - accuracy: 0.0000e+00 
Epoch 19/20

1/1 [==============================] - 0s 11us/step - loss: 0.0472 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0472 - accuracy: 0.0000e+00 
Epoch 20/20

1/1 [==============================] - 0s 10us/step - loss: 0.0471 - accuracy: 0.0000e+00

1/1 [==============================] - 0s 3ms/step - loss: 0.0471 - accuracy: 0.0000e+00 
TensorBoard 2.2.2 at http://127.0.0.1:5001/ (Press CTRL+C to quit)
Started TensorBoard at http://127.0.0.1:5001 
LS0tCnRpdGxlOiAnQXByZW5kaXphamUgZGUgTcOhcXVpbmEuIFRhcmVhIDI6IEdyYWRpZW50IERlc2NlbnQgYW5kIExlYXJuaW5nIFJhdGVzJwpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAotLS0KCipQcm9mZXNvcjogRmVsaXBlIEdvbnrDoWxleioKCgoqRWxhYm9yYWRvIHBvciBEYW5pZWxhIFBpbnRvIFZlaXphZ2EqCgoKCgo+UGFydGUgMTogZGVzY2Vuc28gZW4gZ3JhZGllbnRlCgpSZXNvbHZlcmVtb3MgdW4gcHJvYmxlbWEgZGUgbWluaW1pemFjacOzbiB1c2FuZG8gZGVzY2Vuc28gZW4gZ3JhZGllbnRlLiBDb25zaWRlcmEgbGEgc2lndWllbnRlIGZ1bmNpw7NuCgoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCmBgYHtyfQpoIDwtIGZ1bmN0aW9uKHgpIHsKICB3IDwtIHggLSA0CiAgKDEvNTApICogKHdeNCArIHdeMiArIDEwMCAqIHcpCn0KYGBgCgoqKlByZWd1bnRhKiouIGdyYWZpY2EgbGEgZnVuY2nDs24gaC4gwr9Ew7NuZGUgZXN0w6EgZWwgbcOtbmltbz8gIMK/Q3XDoWwgZXMgZWwgdmFsb3IgcXVlIHRvbWEgbGEgZnVuY2nDs24gZW4gZWwgbcOtbmltbz8KCmBgYHtyfQp4IDwtIGMoLTEwMDoxMDApCmhfeDwtIHRpYmJsZShoKHgpLHgpCmhfeApgYGAKCmBgYHtyLGZpZy5hbGlnbj0nY2VudGVyJ30KaF94PC0gdGliYmxlKGgoeCkseCkKZ2dwbG90KGhfeCkgKyBnZW9tX2xpbmUoYWVzKHg9eCwgeT1oKHgpKSkgKyBsYWJzKHRpdGxlID0gJ0Z1bmNpw7NuIGgnKQpgYGAKYGBge3J9CnByaW50KHBhc3RlMCgnRWwgdmFsb3IgbcOtbmltbyBlc3TDoSBlbiB4PTEsIGVuIGVzZSBwdW50bywgbGEgZnVuY2nDs24gaF94KCkgdG9tYSBlbCBzaWd1aWVudGUgdmFsb3I6ICcsIG1pbihoX3gkYGgoeClgKSkpCmBgYAoKCioqUHJlZ3VudGEqKjogQWhvcmEgY2FsY3VsYSBsYSBkZXJpdmFkYSBlbiBsYSBzaWd1aWVudGUgZnVuY2nDs24gKHJlbGxlbmEpOgoKYGBge3J9CiMgY2FsY3VsYSBsYSBkZXJpdmFkYQpoX2Rlcml2IDwtIGZ1bmN0aW9uKHgpIHsKICAjIGFxdcOtIHR1IGNhbGN1bG8sIGRlYmUgcmVncmVzYXIgbGEgZGVyaXZhZGEgZGUgaCAKICAjIGV2YWx1YWRhIGVuIHgKICB3IDwtIHggLSA0CiAgZGVyaXYgPC0gKDEvMjUpICogKDIqKHcqKjMpICsgdyArIDUwKQogICNkZXJpdiA8LSAoNCooeC00KV4zICsgMiooeC00KSArMTAwKSoxLzE1MAogIGRlcml2Cn0KYGBgCgoKClVzYXJlbW9zIGVsIGPDs2RpZ28gZGUgbGEgY2xhc2UgYW50ZXJpb3I6CgpgYGB7cn0KIyBmdW5jacOzbiBwYXJhIGRlc2NlbnNvCmRlc2NlbnNvIDwtIGZ1bmN0aW9uKG4sIHpfMCwgZXRhLCBoX2Rlcml2KXsKICB6IDwtIG1hdHJpeCgwLG4sIGxlbmd0aCh6XzApKQogIHpbMSwgXSA8LSB6XzAKICBmb3IoaSBpbiAxOihuLTEpKXsKICAgICMgcGFzbyBkZSBkZXNjZW5zbwogICAgeltpKzEsIF0gPC0geltpLCBdIC0gZXRhICogaF9kZXJpdih6W2ksIF0pCiAgfQogIHoKfQpgYGAKCgoqKlByZWd1bnRhKio6IEVtcGV6YW1vcyBsYXMgaXRlcmFjaW9uZXMgZW4gMC4gRW4gZWwgc2lndWllbnRlIGPDs2RpZ28sIGVzY29nZSB1biB0YW1hw7FvIGRlIHBhc28gKCRldGEkKSBkZW1hc2lhZG8gZ3JhbmRlIChkaXZlcmdlKSwKZGVtYXNpYWRvIGNoaWNvICh0YXJkYSBtdWNobyBlbiBjb252ZXJnZXIpIHkgdW5vIGludGVybWVkaW8gZG9uZGUKYWxjYW5jZXMgZWwgbcOtbmltbyBlbiB1biBuw7ptZXJvIGRlIGl0ZXJhY2lvbmVzIHJhem9uYWJsZS4gUHVlZGUKc2VyIG5lY2VzYXJpbyBxdWUgYWp1c3RlcyBlbCBuw7ptZXJvIGRlIGl0ZXJhY2lvbmVzLCB5IHB1ZWRlCnNlciBxdWUgb2J0ZW5nYXMgZGVzYm9yZGVzIHNpIHBvbmVzIHRhbWHDsW9zIGRlIHBhc28gZGVtYXNpYWRvCmdyYW5kZXM6CgpgYGB7cn0KIyBwb24gdW4gdmFsb3IgZ3JhbmRlIHkgdW5vIGNoaWNvIHBhcmEgZXRhLiDCv1F1w6kgcGFzYT8Kel8wIDwtIDAKCmZvciAoaSBpbiBjKDAuMDAxLCAwLjAxLCAwLjEsIDAuMywgMC4zNDUsIDEpKXsKICBldGEgPC0gaSAKICBuYW1lID0gcGFzdGUoJ0xlYXJuaW5nIHJhdGUnLGksc2VwPSIgIikKCiAgeiA8LSBkZXNjZW5zbygxMDAsIHpfMCwgZXRhLCBoX2Rlcml2KQoKICAjR3JhZmljYSBsYXMgaXRlcmFjaW9uZXMKICBkYXRfaXRlcmFjaW9uZXMgPC0gdGliYmxlKGl0ZXJhY2lvbiA9IDE6bnJvdyh6KSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHpbLCAxXSwgeSA9IGgoelssIDFdKSkKICBwPC1nZ3Bsb3QoZGF0X2l0ZXJhY2lvbmVzLCBhZXMoeCA9IGl0ZXJhY2lvbiwgeSA9IHgpKSArIGdlb21fcG9pbnQoKSArIGdlb21fbGluZSgpKyBnZ3RpdGxlKG5hbWUpCiAgYXNzaWduKHBhc3RlMCgicGxvdCIsIGkpLCBwKQoKfQpgYGAKCgoKYGBge3IgZWNobz1UUlVFLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkoY293cGxvdCkKcGxvdF9ncmlkKHBsb3QwLjAwMSwgcGxvdDAuMDEsIHBsb3QwLjEsIHBsb3QwLjMsIHBsb3QwLjM0NSwgcGxvdDEsCiAgICAgICAgICBsYWJlbHMgPSAnQVVUTycsIGxhYmVsX2ZvbnRmYW1pbHkgPSAic2VyaWYiLCBsYWJlbF9mb250ZmFjZSA9ICJwbGFpbiIsCiAgICAgICAgICBsYWJlbF9jb2xvdXIgPSAiYmxhY2siLCBuY29sID0gMikKYGBgCgo+IFBhcnRlIDI6IGRlc2NlbnNvIGVuIGdyYWRpZW50ZSBwYXJhIHJlZ3Jlc2nDs24KCioqUHJlZ3VudGEqKjogZW4gZWwgc2lndWllbnRlIGVqZXJjaWNpbyBhanVzdGFtb3MgdW4gbW9kZWxvCmRlIHJlZ3Jlc2nDs24gcGFyYSBlbCBwcm9ibGVtYSBkZSBwcmVjaW8gZGUgY2FzYXMgcXVlIHZpbW9zIGVuIApjbGFzZS4gRXNjb2dlIAoKMS4gVW4gbsO6bWVybyBkZSBpdGVyYWNpb25lcyB5IHRhbWHDsW8gZGUgcGFzbyBhZGVjdWFkb3MgcGFyYSBlbmNvbnRyYXIgbG9zIGNvZWZpY2llbnRlcywKMi4gwr9RdcOpIHBhc2Egc2kgcG9uZXMgdW4gdGFtYcOxbyBkZSBwYXNvIG11eSBjaGljbz8gwr9RdcOpIHBhc2EgCnNpIHBvbmVzIHVuIHRhbWHDsW8gZGUgcGFzbyBkZW1hc2lhZG8gZ3JhbmRlPwoKQ2FyZ2Ftb3MgbG9zIGRhdG9zOgoKYGBge3J9CmNhc2FzX3JlY2V0YSA8LSByZWFkX3JkcygiY2FzYXNfcmVjZXRhLnJkcyIpCnhfZW50IDwtIGNhc2FzX3JlY2V0YSAlPiUgcHJlcCAlPiUganVpY2UgJT4lIHNlbGVjdCh0aWVuZV9waXNvXzIsIGNhbGlkYWQpICU+JSBhcy5tYXRyaXgoKQp5X2VudCA8LSBjYXNhc19yZWNldGEgJT4lIHByZXAgJT4lIGp1aWNlICU+JSBwdWxsKHByZWNpb19tMl9taWxlcykKYGBgCgoqKlByZWd1bnRhKio6IHF1w6kgY29udGllbmVuIHhfZW50IHkgeV9lbnQ/CgorIHhfZW50IGNvbnRpZW5lIGxvcyBmZWF0dXJlcyBjb24gbG9zIGN1w6FsZXMgc2UgaGFyw6EgbGEgcHJlZGljY2nDs247IGVuIGVzdGUgY2FzbyBzb24gZG9zIGZlYXR1cmVzOiB0aWVuZV9waXNvXzIgeSBjYWxpZGFkLgoKYGBge3J9CnhfZW50ICU+JSBzdW1tYXJ5CmBgYAorIHlfZW50IGNvbnRpZW5lIGxhIHByZWRpY2Npw7NuLCBlbCBwcmVjaW8gcG9yIG1ldHJvIGN1YWRyYWRvLiAKCgp4X2VudCB5IHlfZW50IGNhcmFjdGVyaXphbiBhIGxvcyBkYXRvcyBkZSBlbnRyZW5hbWllbnRvLgoKRGVmaW5pbW9zIHVuIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBlbiBrZXJhcyAoKipub3RhKio6IHNpIHF1aWVyZXMgCmhhY2VyIGNvcnJpZGFzIGRlc2RlIGNlcm8gZW1waWV6YSBjb24gZXN0YXMgbMOtbmVhcyBxdWUgc2lndWVuLiBEZSBvdHJhIG1hbmVyYQp2YXMgYSBpdGVyYXIgZGVzZGUgZWwgcHVudG8gZG9uZGUgdGUgaGF5YXMgcXVlZGFkbyBlbiBsYSBjb3JyaWRhIGFudGVyaW9yKToKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeSh0aWR5bW9kZWxzKQpsaWJyYXJ5KGtlcmFzKQogIyBhanVzdGEgZXN0ZSB2YWxvciwgZXMgbGUgdGFtYcOxbyBkZSBwYXNvIG8gdGFzYSBkZSBhcHJlbmRpemFqZQoKY2FzYXNfcmVjZXRhIDwtIHJlYWRfcmRzKCJjYXNhc19yZWNldGEucmRzIikKeF9lbnQgPC0gY2FzYXNfcmVjZXRhICU+JSBwcmVwICU+JSBqdWljZSAlPiUgc2VsZWN0KHRpZW5lX3Bpc29fMiwgY2FsaWRhZCkgJT4lIGFzLm1hdHJpeCgpCgp5X2VudCA8LSBjYXNhc19yZWNldGEgJT4lIHByZXAgJT4lIGp1aWNlICU+JSBwdWxsKHByZWNpb19tMl9taWxlcykKICAgCmZvciAoaSBpbiBjKDAuMDAxLCAwLjAxLCAwLjEsIDAuMiwgMC4zKSl7ICAgCiAgIGk9IGFzLmNoYXJhY3RlcihpKQogICBuYW1lID0gcGFzdGUoJ2xvZ3MvcnVuXycsaSxzZXA9IiIpCiAgIG5fZW50cmVuYSA8LSBucm93KHhfZW50KQogICBtb2RlbG9fY2FzYXMgPC0ga2VyYXNfbW9kZWxfc2VxdWVudGlhbCgpIAogICBtb2RlbG9fY2FzYXMgJT4lCiAgICAgICAgbGF5ZXJfZGVuc2UodW5pdHMgPSAxLGFjdGl2YXRpb24gPSAibGluZWFyIiwKICAgICAgICAga2VybmVsX2luaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJfY29uc3RhbnQoMCksCiAgICAgICAgICBiaWFzX2luaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJfY29uc3RhbnQoMCkpICAgCiAgIG1vZGVsb19jYXNhcyAlPiUgY29tcGlsZSgKICAgICAgIGxvc3MgPSAibWVhbl9zcXVhcmVkX2Vycm9yIiwgICMgcMOpcmRpZGEgY3VhZHLDoXRpY2EKICAgICAgICBvcHRpbWl6ZXIgPSBvcHRpbWl6ZXJfc2dkKGxyID0gbHIpLCAjIGRlc2NlbnNvIGVuIGdyYWRpZW50ZQogICAgICAgICNtZXRyaWNzID0gbGlzdCgibWVhbl9zcXVhcmVkX2Vycm9yIiksCiAgICAgICAgbWV0cmljcyA9IGMoJ2FjY3VyYWN5JykKKQogICAKICAgaGlzdG9yaWEgPC0gbW9kZWxvX2Nhc2FzICU+JSBmaXQoCiAgICAgIGFzLm1hdHJpeCh4X2VudCksICMgeCBlbnRyYWRhcwogICAgICB5X2VudCwgICAgICAgICAgICAjIHkgc2FsaWRhIG8gdGFyZ2V0CiAgICAgIGJhdGNoX3NpemUgPSBucm93KHhfZW50KSwgIyBwYXJhIGRlc2NlbnNvIGVuIGdyYWRpZW50ZQogICAgICBjYWxsYmFja3MgPSBjYWxsYmFja190ZW5zb3Jib2FyZChuYW1lKSwKICAgICAgdmlld19tZXRyaWNzID0gRkFMU0UsCiAgICAgIGVwb2NocyA9IDIwICMgbsO6bWVybyBkZSBpdGVyYWNpb25lcwogICAgICApCn0KCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiNMYXVuY2hlcyB0ZW5zb3Jib2FyZAp0ZW5zb3Jib2FyZCgibG9ncyIpCmBgYAoK