Red neuronal multicapa en R con Keras – Categorizar con variables numéricas

por | Dic 8, 2018 | R, Redes neuronales | 1 Comentario

Instalación de paquetes

# install.packages("keras")
library(keras)
use_session_with_seed(1,disable_parallel_cpu = FALSE)

Generación del conjunto de entrenamiento

# Cargar datos iris desordenados (tipos de flores con sus diferentes características)
data = iris[sample(nrow(iris)),]
head(data)
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
40           5.1         3.4          1.5         0.2     setosa
56           5.7         2.8          4.5         1.3 versicolor
85           5.4         3.0          4.5         1.5 versicolor
134          6.3         2.8          5.1         1.5  virginica
30           4.7         3.2          1.6         0.2     setosa
131          7.4         2.8          6.1         1.9  virginica
# Indicar las variables predictoras
x = data[,1:4]

# Normalizar valores de variables predictoras
x = as.matrix(apply(x, 2, function(x) (x-min(x))/(max(x) - min(x))))
# Indicar la variable categórica a predecir
y = data[, "Species"]

# Crear caracterisiticas ficticias una por cada categoría
levels(y) = 1:length(y)
y = to_categorical(as.integer(y) - 1 , num_classes = 3)

 

Definir el modelo

# Crear el modelo secuencial
model = keras_model_sequential()

# Definir capas del modelo

# Crear el modelo secuencial
model = keras_model_sequential()

# Definir capas del modelo
model %>% 
  # La capa de entrada tendrá el mismo número de entradas que el total de variables predictoras
  layer_dense(input_shape = ncol(x), units = 10, activation = "relu") %>%
  # Las capas intermedias buscan caracteristicas asociadas a los datos
  layer_dense(units = 8, activation = "relu") %>%
  # La capa de salida tendrá el mismo número de salidas que las categorías a predecir
  layer_dense(units = 3, activation = "softmax")

# Visualizar el modelo definido 
summary(model)
_____________________________________________________________________
Layer (type)                  Output Shape                Param #             
=====================================================================
dense_1 (Dense)               (None, 10)                  50
_____________________________________________________________________
dense_2 (Dense)               (None, 8)                   88                 
_____________________________________________________________________
dense_3 (Dense)               (None, 3)                   27          
=====================================================================
Total params: 165
Trainable params: 165
Non-trainable params: 0

 

Compilar el modelo

# Ejecutar la red neuronal
model %>% compile(
 loss = 'categorical_crossentropy',
 optimizer = optimizer_rmsprop(),
 metrics = c('accuracy')
)

 

Entrenar el modelo

# Entrenar el modelo con el dataset generado
fit = model %>%
  fit(
    x = x,
    y = y,
    shuffle = T,
    batch_size = 10,
    validation_split = 0.2,
    epochs = 150,
    verbose = 1
  )
plot(fit)
# Entrenar el modelo con el dataset generado
fit = model %>%
fit(
x = x,
y = y,
shuffle = T,
batch_size = 10,
validation_split = 0.2,
epochs = 150,
verbose = 1
)
plot(fit)
Train on 120 samples, validate on 30 samples
Epoch 1/150
120/120 [==============================] - 0s 2ms/step - loss: 1.0946 - acc: 0.3583 - val_loss: 1.0875 - val_acc: 0.3000
Epoch 2/150
120/120 [==============================] - 0s 184us/step - loss: 1.0575 - acc: 0.5333 - val_loss: 1.0565 - val_acc: 0.6000
Epoch 3/150
120/120 [==============================] - 0s 200us/step - loss: 1.0287 - acc: 0.6833 - val_loss: 1.0324 - val_acc: 0.6000
Epoch 4/150
120/120 [==============================] - 0s 191us/step - loss: 1.0039 - acc: 0.6833 - val_loss: 1.0102 - val_acc: 0.6000
Epoch 5/150
120/120 [==============================] - 0s 191us/step - loss: 0.9810 - acc: 0.6833 - val_loss: 0.9863 - val_acc: 0.6000
E

1 Comentario

  1. Dani Ibañez

    Hola, estoy intentando trasladar a R un ejercicio que he realizado en Python pero al realizar el fit() me aparece un error que dice list object has no attribute dtype. En concreto habla de la llamada a la función py_get_attr_impl(x,name,silent)

    Tienes idea porqué ocurre esto?

    Si crees que me puedes ayudar , si es posible me mandas un email y te mando el código si hace falta. Te tengo puesto en mis ejercicios como referencia!!!
    Mil gracias!

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *