Usuario:


Red Neuronal

Storyboard

>Modelo

ID:(1345, 0)



Concepto de Layers (Capas)

Imagen

>Top


La clave de un sistema neuronal es la introducción de layers (capas) de nodos que van de un layer de entrada (input) vía los layers intermedios o ocultos (hidden) hasta el layer de salida (output):

Un sistema básico tiene un layer intermedio lo que le permite atender consultas simples tipo AND (y) y OR (o) pero no del tipo XOR que requiere mas de un layer intermedio.

Cuando existe más de un layer interno hablamos de deep learning (aprendizaje profundo).

ID:(10382, 0)



Cargar Tensorflow

Descripción

>Top


import tensorflow as tf

from tensorflow import keras

from tensorflow.keras.models import Sequential

# load model

from tensorflow.keras.models import load_model

from tensorflow.keras.layers import Activation, Dense

from tensorflow.keras.optimizers import Adam

from tensorflow.keras.metrics import categorical_crossentropy

from tensorflow.keras.preprocessing.image import ImageDataGenerator

from tensorflow.keras.preprocessing import image

from tensorflow.keras.models import Model

from tensorflow.keras.applications import imagenet_utils

from sklearn.metrics import confusion_matrix

ID:(10384, 0)



Definición de Layers (Capas) simple

Imagen

>Top


Una vez se tiene el modelo se puede crear la primera layer (capa), que es la oculta, que esta completamente conectado por lo que se usa el método dense (denso) y se define con

```

const hidden = tf.layers.dense(configHidden);

```

en que debemos previamente configurar el layer indicando

- el numero de nodos units,

- el numero de nodos de los que depende inputShape, y

- la forma como son activados activation:

Si se suponen 4 nodos, que dependen de 2 nodos de input y si se usa el método de activación sigmoid (pasa de 0 a 1 en forma paulatina cuando la variable cambia de signo) la configuración sería:

```

const configHidden = {

units: 4,

inputShape: [2],

activation: 'sigmoid'

}

```

Se puede crear una segunda layer (capa) como aquella de salida en forma análoga:

```

const output = tf.layers.dense(configOutput);

```

en que la configuración de la layer de salida sería

```

const configOutput = {

units: 3,

activation: 'sigmoid'

}

```

y se le pueden agregar al modelo usando la función add.

```

model.add(configHidden);

model.add(configOutput);

```

En la configuración del output no es necesario indicar el inputShape ya que este se determina en forma automática.

ID:(10383, 0)



Compilar el Modelo

Descripción

>Top


model.compile(

optimizer=Adam(learning_rate=0.0001),

loss='categorical_crossentropy',

metrics=['accuracy']

)

ID:(10385, 0)



Entrenar el Modelo

Imagen

>Top


Para entrenar el modelo se debe obtener datos para aplicar que en este caso en un tensor de input

const xs = tf.tensor2d([...]);

y datos de output

const ys = tf.tensor2d([...]);

Con estos dato se puede realizar el entrenamiento mediante

train().then() => {

let output = model.predict(xs);

outputs.print();

console.log('training complete');

con la función

async funtion train() {

for (let i = 0;i < 1000; i++) {

const config = {

shuffle : true,

epochs: 10

}

const response = await model.fit(xs, ys, config);

console.log(response.history.loss[0]);

}

}

ID:(10386, 0)



Problema del XOR

Concepto

>Top


Si existen dos nodos n_1 y n_2 que pueden ser verdaderos (V) o falsos (F) se les puede asociar a un nodo n_0 con

1 La proposición lógica AND (y)

$n_1$ | $n_2$ | $n_0$

---------|----------|----------

V | V | V

V | F | F

F | V | F

F | F | F

que se puede modelar con

n_0=n_1n_2

2 La proposición lógica OR (o)

$n_1$ | $n_2$ | $n_0$

---------|----------|----------

V | V | V

V | F | V

F | V | V

F | F | F

que se puede modelar con

n_0=n_1+n_2-n_1n_2

3 La proposición lógica XOR

$n_1$ | $n_2$ | $n_0$

---------|----------|----------

V | V | F

V | F | V

F | V | V

F | F | F

que no se puede modelar como una ecuación en n_1 y n_2 y requiere de un nivel adicional. En una red neuronal esto significa que se debe incluir un layer adicional.

ID:(10387, 0)