Ya	eres	parte	de	la	evolución
Solid	Day
Deep	Learning:	Introducción,	
usos	e	implementación	con	
TensorFlow
Enrique	Daniel	Zenteno	Jiménez
https://mx.linkedin.com/in/ezentenoj
#sgnext
Introducción	al	
Aprendizaje	Profundo
¿Qué se puede hacer con Visión por
Computadora?
● Medir: saber la distancia que hay entre dos pixeles en la imagen o
entre la cámara y el objeto.
o Visión estereoscópica: basado en dos cámaras. Simula la visión humana.
o Triangulación: utiliza una cámara y un emisor de luz. El mayor ejemplo es
el Kinect de Microsoft.
● Segmentar: conocer el límite físico de un objeto.
● Clasificar: darle un nombre a un objeto.
¿Cómo se clasifica un objeto en una imagen?
Por medio de dos pasos: la extracción de las características y el
entrenamiento de un clasificador.
● Búsqueda de características:
o Valor del pixel
o Filtros:
§ Pasa altas, bajas, bandas.
§ Convoluciones.
o Extracción de características:
§ Histogram of Oriented Gradients.
§ Scale-invariant feature transform.
§ Haralick texture features.
Filtros: convolución (detector de contornos)
Kernel
Generación de características: histograma
orientado de gradientes
Clasificación de características
● Support Vector Machines
● Decision trees
● Random Forest
● Naive Bayes
● Multi-layer Perceptron
Aprendizaje profundo
La obtención de características también es por medio de un proceso
iterativo de aprendizaje.
Extractor de
características
entrenable
Extractor de
características
entrenable
Extractor de
características
entrenable
Clasificador
Extractor de características entrenable
Contornos Texturas Objetos
*Ejemplo de una red neuronal convolucional entrenada con Imagenet
Características conectadas en imágenes
Pixel Contorno Textura Patrón Parte Objeto
Técnica	de	aprendizaje	
profundo	para	la	
clasificación	de	texto
¿Qué características necesitamos construir?
Letra Palabra Frases Oración Enunciado Historia
Tratar texto como imagen (Zhang y LeCun,
2015)
El texto es transformado en una imagen binaria.
Dimensiones: (alfabeto x longitud máxima)
Juniperus =
Red neuronal convolucional
Características:
Profundidad de 9 capas
6 capas de filtros de convolución
3 capas de Multi-layer perceptron.
¿Cómo ha sido probado?
1. DBpedia
a. 14 clases.
b. 560,000 documentos para entrenar.
c. 70,000 para probar.
d. 98.40% de exactitud en el conjunto de prueba.
2. Amazon Review Sentiment Analysis
a. 5 clases (subjetividad en comentarios de productos)
b. 3,600,000 comentarios para entrenar.
c. 400,000 comentarios para probar.
d. 59.57% de exactitud en el conjunto de prueba.
3. SogouCA en Chino
Ejemplo	práctico	en	
Tensorflow
¿Qué es Tensorflow?
• Biblioteca de software libre para hacer computación numérica por
medio de grafos.
• Los nodos representan las operaciones matemáticas; las conexiones,
los datos.
• Fue originalmente desarrollado por ingenieros del proyecto Google
Brain.
• Estadísticas de su repositorio en Github
(https://github.com/tensorflow/tensorflow):
• +30k estrellas.
• +12k Forks.
• +300 contribuidores.
Implementación	de	la	red	publicada en	Very	Deep	
Convolutional	Networks	for	Natural	Language	Processing,	
2016
Implementación usando tflearn
net	= tflearn.input_data([None,	7,	1014,	1])
net	= tf.pad(net,	((0,	0),	(0,	0),	(1,	1),	(0,	0)))
net	= tflearn.layers.conv_2d(net,	64,	[7,	3],	scope='conv1',	padding='valid')
for i	in range(4):
net	= tflearn.layers.conv_2d(net,	64,	[1,	3],	scope='conv_64_{0}'.format(i),	padding='SAME',	activation='relu')
net	= tflearn.layers.normalization.batch_normalization(net)
net	= tflearn.layers.conv.max_pool_2d(net,	[1,	3],	strides=2)
for i	in range(4):
net	= tflearn.layers.conv_2d(net,	128,	[1,	3],	scope='conv_128_{0}'.format(i),	padding='SAME',	activation='relu')
net	= tflearn.layers.normalization.batch_normalization(net)
net	= tflearn.layers.conv.max_pool_2d(net,	[1,	3],	strides=2)
for i	in range(4):
net	= tflearn.layers.conv_2d(net,	256,	[1,	3],	scope='conv_256_{0}'.format(i),	padding='SAME',	activation='relu')
net	= tflearn.layers.normalization.batch_normalization(net)
net	= tflearn.layers.conv.max_pool_2d(net,	[1,	3],	strides=2)
for i	in range(4):
net	= tflearn.layers.conv_2d(net,	512,	[1,	3],	scope='conv_512_{0}'.format(i),	padding='SAME',	activation='relu')
net	= tflearn.layers.normalization.batch_normalization(net)
net	= tflearn.layers.conv.max_pool_2d(net,	[1,	8],	strides=16)
net	= tflearn.layers.core.flatten(net)
Implementación usando tflearn
for i	in range(2):
net	= tflearn.layers.core.fully_connected(net,	2048,	activation='relu')
net	= tflearn.layers.core.fully_connected(net,	9,	activation='softmax')
sgd	= tflearn.SGD(learning_rate=0.005)
accuracy	= tflearn.metrics.Accuracy()
net	= tflearn.regression(net,	optimizer=sgd,	metric=accuracy,	loss='categorical_crossentropy',	to_one_hot=True,	n_classes=9)
model	= tflearn.DNN(net,	checkpoint_path='message_tickets',	tensorboard_verbose=2)
model.fit(X_train,	y_train,	n_epoch=100,	validation_set=(X_test,	y_test),	batch_size=128,	snapshot_step=100,	run_id='message_tickets',	
show_metric=True)
Training Step: 1769 | total loss: 1.11202
| SGD | epoch: 030 | loss: 1.11202 - acc: 0.6327 -- iter: 3712/7611
Monitoreo de avance en Tensorboard
¿Preguntas?
Contacto:	daniel@holagus.com

Solid Day - Deep learning

  • 1.
  • 2.
  • 3.
    ¿Qué se puedehacer con Visión por Computadora? ● Medir: saber la distancia que hay entre dos pixeles en la imagen o entre la cámara y el objeto. o Visión estereoscópica: basado en dos cámaras. Simula la visión humana. o Triangulación: utiliza una cámara y un emisor de luz. El mayor ejemplo es el Kinect de Microsoft. ● Segmentar: conocer el límite físico de un objeto. ● Clasificar: darle un nombre a un objeto.
  • 4.
    ¿Cómo se clasificaun objeto en una imagen? Por medio de dos pasos: la extracción de las características y el entrenamiento de un clasificador. ● Búsqueda de características: o Valor del pixel o Filtros: § Pasa altas, bajas, bandas. § Convoluciones. o Extracción de características: § Histogram of Oriented Gradients. § Scale-invariant feature transform. § Haralick texture features.
  • 5.
    Filtros: convolución (detectorde contornos) Kernel
  • 6.
    Generación de características:histograma orientado de gradientes
  • 7.
    Clasificación de características ●Support Vector Machines ● Decision trees ● Random Forest ● Naive Bayes ● Multi-layer Perceptron
  • 8.
    Aprendizaje profundo La obtenciónde características también es por medio de un proceso iterativo de aprendizaje. Extractor de características entrenable Extractor de características entrenable Extractor de características entrenable Clasificador
  • 9.
    Extractor de característicasentrenable Contornos Texturas Objetos *Ejemplo de una red neuronal convolucional entrenada con Imagenet
  • 10.
    Características conectadas enimágenes Pixel Contorno Textura Patrón Parte Objeto
  • 11.
  • 12.
    ¿Qué características necesitamosconstruir? Letra Palabra Frases Oración Enunciado Historia
  • 13.
    Tratar texto comoimagen (Zhang y LeCun, 2015) El texto es transformado en una imagen binaria. Dimensiones: (alfabeto x longitud máxima) Juniperus =
  • 14.
    Red neuronal convolucional Características: Profundidadde 9 capas 6 capas de filtros de convolución 3 capas de Multi-layer perceptron.
  • 15.
    ¿Cómo ha sidoprobado? 1. DBpedia a. 14 clases. b. 560,000 documentos para entrenar. c. 70,000 para probar. d. 98.40% de exactitud en el conjunto de prueba. 2. Amazon Review Sentiment Analysis a. 5 clases (subjetividad en comentarios de productos) b. 3,600,000 comentarios para entrenar. c. 400,000 comentarios para probar. d. 59.57% de exactitud en el conjunto de prueba. 3. SogouCA en Chino
  • 16.
  • 17.
    ¿Qué es Tensorflow? •Biblioteca de software libre para hacer computación numérica por medio de grafos. • Los nodos representan las operaciones matemáticas; las conexiones, los datos. • Fue originalmente desarrollado por ingenieros del proyecto Google Brain. • Estadísticas de su repositorio en Github (https://github.com/tensorflow/tensorflow): • +30k estrellas. • +12k Forks. • +300 contribuidores.
  • 18.
  • 19.
    Implementación usando tflearn net =tflearn.input_data([None, 7, 1014, 1]) net = tf.pad(net, ((0, 0), (0, 0), (1, 1), (0, 0))) net = tflearn.layers.conv_2d(net, 64, [7, 3], scope='conv1', padding='valid') for i in range(4): net = tflearn.layers.conv_2d(net, 64, [1, 3], scope='conv_64_{0}'.format(i), padding='SAME', activation='relu') net = tflearn.layers.normalization.batch_normalization(net) net = tflearn.layers.conv.max_pool_2d(net, [1, 3], strides=2) for i in range(4): net = tflearn.layers.conv_2d(net, 128, [1, 3], scope='conv_128_{0}'.format(i), padding='SAME', activation='relu') net = tflearn.layers.normalization.batch_normalization(net) net = tflearn.layers.conv.max_pool_2d(net, [1, 3], strides=2) for i in range(4): net = tflearn.layers.conv_2d(net, 256, [1, 3], scope='conv_256_{0}'.format(i), padding='SAME', activation='relu') net = tflearn.layers.normalization.batch_normalization(net) net = tflearn.layers.conv.max_pool_2d(net, [1, 3], strides=2) for i in range(4): net = tflearn.layers.conv_2d(net, 512, [1, 3], scope='conv_512_{0}'.format(i), padding='SAME', activation='relu') net = tflearn.layers.normalization.batch_normalization(net) net = tflearn.layers.conv.max_pool_2d(net, [1, 8], strides=16) net = tflearn.layers.core.flatten(net)
  • 20.
    Implementación usando tflearn fori in range(2): net = tflearn.layers.core.fully_connected(net, 2048, activation='relu') net = tflearn.layers.core.fully_connected(net, 9, activation='softmax') sgd = tflearn.SGD(learning_rate=0.005) accuracy = tflearn.metrics.Accuracy() net = tflearn.regression(net, optimizer=sgd, metric=accuracy, loss='categorical_crossentropy', to_one_hot=True, n_classes=9) model = tflearn.DNN(net, checkpoint_path='message_tickets', tensorboard_verbose=2) model.fit(X_train, y_train, n_epoch=100, validation_set=(X_test, y_test), batch_size=128, snapshot_step=100, run_id='message_tickets', show_metric=True) Training Step: 1769 | total loss: 1.11202 | SGD | epoch: 030 | loss: 1.11202 - acc: 0.6327 -- iter: 3712/7611
  • 21.
    Monitoreo de avanceen Tensorboard
  • 22.