6 de junio de 2020

Entrenando una red neuronal keras en linux

Hola,
tras la última entrada creo que ha llegado el momento de comenzar a programar redes neuronales profundas con la ayuda del libro Deep Learning Illustrated. En este caso el autor ha programado sus ejemplos en python, uno de los lenguajes más utilizados en este campo, y por tanto deberás crearte un ecosistema adecuado con todas las herramientas y dependencias necesarias, en este caso tensorflow y su interfaz keras. En un sistema CentOS Linux lo hice de la siguiente manera, con pyenv:
sudo curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

# agrego pyenv a .bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# instalo python 3.6 y actualizo pip
pyenv install 3.6.0
pyenv local 3.6.0
pip install --upgrade pip
pip install jupyter
# creo un ecosistema/virtualenv al que llamo DL
pyenv virtualenv 3.6.0 DL
pyenv shell DL
# instalo las dependencias del libro de Jon Krohn
# en mi caso tuve que poner TMPDIR=/particion_grande/ antes de pip
# porque se llenaba la particion /tmp
pip install tensorflow
pip install keras

# otra librería de aprendizaje prodfundo alternativa a keras & tensorflow
pip install mxnet

Y ya está, ahora cuando quiero usar este ecosistema  solamente tengo que hacer:
$ pyenv shell DL
Todos los ejemplos de libro están disponibles en https://github.com/the-deep-learners/deep-learning-illustrated, en forma de cuadernos jupyter que puedes explorar directamente desde GitHub o en tu navegador. Si quieres probarlos directamente en el terminal deberás convertirlos a scripts .py y luego ejecutarlos:
jupyter nbconvert --to script deep-learning-illustrated/notebooks/regression_in_keras.ipynb
python deep-learning-illustrated/notebooks/regression_in_keras.py
En este caso obtendremos la siguiente salida, que resume la arquitectura de la red especificada en regression_in_keras.ipynb y su entrenamiento a lo largo de 32 épocas:

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense_1 (Dense)              (None, 32)                448
_________________________________________________________________
batch_normalization_1 (Batch (None, 32)                128
_________________________________________________________________
dense_2 (Dense)              (None, 16)                528
_________________________________________________________________
batch_normalization_2 (Batch (None, 16)                64
_________________________________________________________________
dropout_1 (Dropout)          (None, 16)                0
_________________________________________________________________
dense_3 (Dense)              (None, 1)                 17
=================================================================
Total params: 1,185
Trainable params: 1,089
Non-trainable params: 96

Train on 404 samples, validate on 102 samples
Epoch 1/32

  8/404 [..............................] - ETA: 30s - loss: 865.3292
 80/404 [====>.........................] - ETA: 2s - loss: 720.8563
152/404 [==========>...................] - ETA: 1s - loss: 644.4068
232/404 [================>.............] - ETA: 0s - loss: 602.0502
304/404 [=====================>........] - ETA: 0s - loss: 578.7887
376/404 [==========================>...] - ETA: 0s - loss: 588.8638
404/404 [==============================] - 1s 2ms/step - loss: 583.1135 - val_loss: 786.3666
....

  8/404 [..............................] - ETA: 0s - loss: 18.8216
 88/404 [=====>........................] - ETA: 0s - loss: 34.8777
168/404 [===========>..................] - ETA: 0s - loss: 37.6842
248/404 [=================>............] - ETA: 0s - loss: 48.3836
328/404 [=======================>......] - ETA: 0s - loss: 45.0179
404/404 [==============================] - 0s 761us/step - loss: 43.5160 - val_loss: 133.9931

Hasta pronto,
Bruno

No hay comentarios:

Publicar un comentario