Está en la página 1de 81

Deep

Learning
Onramp
C O U R S E

M A T L A B
MÓDULO 1:
USO DE REDES
PREVIAMENTE ORDENADAS
IDENTIFICAR CONTENIDO:

OBJETOS EN En esta sección usaremos principalmente

IMÀGENES
dos funciones para importar y poder
mostrar imágenes almacenadas en un
archivo.
En esta sección del curso se aprenderá a Este archivo puede ser de cualquier
utilizar una red neuronal profunda formato.
prediseñada para clasificar el contenido
ESTA ES LA PRIMERA SECCIÓN QUE
de las siguientes 12 imágenes. VEREMOS EN ESTE MÓDULO.
Usamos la función imread para importar
imágenes almacenadas en un archivo.
Como en el ejemplo que observamos:

código:

%Usaremos la función imread para importar las


imágenes del archivo 'file01.jpg', este nombre lo
colocamos entre paréntesis y el resultado se lo
asignamos a img1 usando el comando =
código:

Podemos utilizar la función imshow para


mostrar una imagen almacenada en una
variable. En el caso mostrado nuestra
variable sería I

%usaremos la función imshow para


mostrar la imagen
%entre paréntesis colocamos la variable
'img1' ya que es la que queremos importar
SIGUE PRACTICANDO

%Repetimos las mismas funciones pero


ahora con las imágenes almacenadas en
los archivos 02 y 03
REALIZAR
CONTENIDO:

PREDICCIONES
En esta sección usaremos la función
classify para realizar predicciones.
Para esto tendremos que tener una copia
de la red profunda predifinida.

ESTA ES LA SEGUNDA SECCIÓN QUE


VEREMOS EN ESTE MÓDULO.
código:

Podemos utilizar la
función googlenet para
crear una copia de la red
profunda predefinida
“GoogLeNet”.

%usaremos la función googlenet para cargar la red y


se lo asignamos a una variable llamada deepnet
También se puede utilizar la función
classify para hacer una predicción sobre
una imagen.

%usaremos la función classify


código: para predecir la imagen en
la variable img1 (como segunda
entrada) y con la red entrenada
deepnet (como primera entrada)
código:

%usamos classify nuevamente para hacer


predicciones con
%las imagenes de los archivos file02.jpg y file03.jpg
SIGUE PRACTICANDO

%observamos que las predicciones


realizadas no han sido del todo correctas.
ARQUITECTURA CONTENIDO:

DE UNA CNN
En esta actividad, se examinará las
propiedades de estas capas para
determinar qué forma de imagen
GoogLeNet toma como entrada y qué
Al igual que otras CNN, GoogLeNet se clases devuelve como salida.
representa en MATLAB como un arreglo
de capas. De especial interés son el
primer y el último elemento de este
arreglo, que representan las capas de ESTA ES LA TERCERA SECCIÓN QUE
entrada y salida, respectivamente. VEREMOS EN ESTE MÓDULO.
Se puede inspeccionar las
capas de la red haciendo
referencia a la propiedad Layers
de la variable, utilizando la
indexación.

código:

%usamos indexación para extraer la


propiedad Layers de la variable deepnet
%el resultado lo asignamos a ly
%extraemos la primera entrada de ly y
se lo asignamos a una variable llamada
Puede inspeccionar una capa individual inlayer
indexándola a ly con la indexación de
arreglos común de MATLAB

código:
Una propiedad importante para una capa de
entrada es InputSize, que es el tamaño
(dimensiones) de las imágenes que la red
espera como entrada.

%volvemos a usar la indexación para


código: extraer la propiedad 'InputSize' de la
variable inlayer.
%almacenamos el resultado en insz
código:

%como queremos indexar la última


capa de 'ly', usaremos el comando end
%esto lo asignamos a una variable
outlayer
La propiedad Classes de una capa de salida
asigna los nombres de las categorías que la
red está entrenada para predecir.

código:

%extraemos la propiedad Classes de la


variable outlayer que es la última capa
de la red
%esto lo almacenamos en
categorynames
SIGUE PRACTICANDO

%hacemos clic en 'view Variable' para ver


las 1000 categorías
INVESTIGACIÓN CONTENIDO:

DE En esta sección del primer módulo


conoceremos nuevas funciones que nos

PREDDICCIONES
ayudarán a poder investigar las
predicciones.
También podremos representarlo con la
función bar, aunque esta pueda
Cuando se pasa la entrada por la red, se
presentar problemas para observarlas
obtiene el cálculo de un valor numérico
para cada una de las neuronas. Estos correctamente.
valores numéricos representan la
predicción de probabilidad de que la ESTA ES LA CUARTA SECCIÓN QUE
entrada pertenezca a cada clase. VEREMOS EN ESTE MÓDULO.
código:

Para obtener las puntuaciones


previstas para todas clases,
%predecimos el tema de la imagen en
debemos solicitar una segunda
'img' en la red net, para esto usaremos
salida a classify.
la función classify.
%lo almacenaremos en dos salidas
que pondremos en corchetes y estas
serán pred y scores
código:

Puede utilizar el vector de las


puntuaciones de predicción para
investigar la clasificación de la red.

%usamos la función bar para crear el


gráfico de barras de ‘scores’ que es
quien contiene las puntuaciones de
predicción
%la gráfica será difícil de leer debido a
todas las puntuaciones que presenta.
Puede resultar útil centrarse solamente
en las clases con puntuación %creamos el arreglo lógico, siempre que
significativa. scores sea mayor a 0.01

código:
código:

%utilizaremos el arreglo lógico


highscores como índice de scores
%luego usaremos la función bar para
representar su gráfica de barras
La propiedad Classes de una capa de salida
asigna los nombres de las categorías que la
red está entrenada para predecir.

código:
%indexaremos los nombres de clases en
categorynames
%con la función xticklabels,
etiquetaremos el gráfico con los nombres
SIGUE PRACTICANDO

%modificamos el primer script con file02.jpg


y file03.jpg
%podemos comprender mejor cómo es la
manera de clasificar de estas imágenes
MÓDULO 2:
GESTIÓN DE COLECCIONES
DE DATOS DE IMAGEN
ALMACENES DE
DATOS DE CONTENIDO:

IMAGENES
Proporciona una estructura organizada para
almacenar, acceder y manipular conjuntos
de imágenes, junto con metadatos y otros
elementos relacionados
Incluyen metadatos asociados, como
información de origen, resolución,
dimensiones y otros detalles relevantes para
cada imagen. Esto facilita la gestión y
manipulación de conjuntos de imágenes en
una aplicación o proyecto.
%Usamos la función 'read' para importar
datos del almacén letterds en una tabla
% se permitirán
Se nos brinda un codigo que importa
obtener los
código:
datos de un almacen especifico.
nombres de
código:
archivo de todas
las imágenes en
Nos piden importar datos del primer
el almacén de
archivo del almacén letterds sabiendo
datos de
que si se usa por primera vez la función
imágenes
'read' se importara el 1° archivo, y si se usa
utilizando la
por segunda vez, el 2° y asi
sucesivamente.
propiedad Files
del objeto
ImageDatastore.
Se nos pide graficar los datos de la
variable 'x' y la variable 'y' de la tabla 'data'

%Entonces usamos el comado 'plot´' para


la grafica con datos de 'x' y 'y'

código:
%Ahora usamos el comando 'plot' para graficar
Se nos pide importar los datos del datos de 'x' y 'y'.
segundo archivo de letterds y graficar
variable 'x' y 'y'. código:
Recordemos que si usamos 'read' por
segunda vez importaremos el 2° archivo.

%Entonces escribimos de nuevo


la función 'read' con letterds

código:
código:

código:
PREPARACIÓN DE
IMÁGENES PARA
UTILIZARLAS COMO
ENTRADA
Esto facilita el desarrollo de algoritmos,
análisis y procesamientos de imágenes
más efectivos y precisos en MATLAB.

Implica realizar algunas tareas de


preprocesamiento y manipulación de
imágenes para asegurarse de que estén en
el formato adecuado y tengan las
características necesarias para su
procesamiento o análisis.
% devolvemos las dimensiones de una
imagen en forma de una matriz de

Utilizamos la función size para ver el tamaño

tamaño de la imagen img. Guardamos el (sz)

resultado en una variable sz.

código:

sz = size(img)
%se usa transforms que para crear un
almacén que contiene los
Importamos GoogLeNet. Extraiga la datos de la
propiedad InputSize de la primera capa %funcion scale en letters
de la red. Almacenamos el resultado en
una variable denominada insz.

código:
net = googlenet;
inlayer = net.Layers(1)
insz = inlayer.InputSize
%se redimensiona la imagen img a una
nueva dimensión de 224x224
píxeles utilizando la función imresize.
Nos piden utilizar la función imresize para
% imshow(img) muestra la imagen
redimensionar la imagen almacenada en
redimensionada en una figura.
la variable img con el tamaño 224 por 224.
Almacene el resultado nuevamente en la
variable img.
Después, mostramos la imagen
redimensionada con imshow.

código: img = imresize(img,[224 224]);


imshow(img)
SIGUE PRACTICANDO

código:

classify(img)

%sale un error sobre el tamaño de las


imagenes
PREPARACIÓN DE LOS
DATOS DE
Permite realizar análisis, manipulaciones y
operaciones de manera eficiente y

ENTRENAMIENTO
escalable en un conjunto de imágenes
relacionadas, facilitando el desarrollo de
aplicaciones de procesamiento de
imágenes más avanzadas y completas.
Redimensionar imágenes en un almacén de datos

Código:
Creamos un almacén de imds = imageDatastore("file*.jpg")
e

datos de imágenes % Se crea un objeto


“imageDatastore” y especificar el
denominado imds que haga
patrón de nombres de archivos
referencia a los archivos deimds = imageDatastore("file*.jpg");
imagen de la carpeta actual % Se accede a las imágenes
con la extensión .jpg. cargadas
while hasdata(imds)
img = read(imds);
% Se realiza operaciones con la
imagen cargada, como
procesamiento o
análisis
código:
auds = augmentedImageDatastore([224
Creamos un almacén de datos de 224],imds)
imágenes aumentadas a partir de % se crea un objeto
imds que redimensione las
augmentedImageDatastore que
imágenes a 224 por 224. Asigne al
toma el objeto
nuevo almacén de datos el
imageDatastore imds y se aplica
nombre auds.
una transformación de
redimensionamiento a todas las
imágenes en el tamaño
especificado [224
224].
código: preds = classify(net,auds)

Clasificamos las imágenes de


% se realiza la clasificación de las imágenes
auds mediante la función en el objeto
classify utilizando la red augmentedImageDatastore auds utilizando
una red neuronal net
almacenada en la variable preentrenada.
net. Almacenamos las % se devuelve las predicciones de clase para
cada imagen en forma
predicciones en una variable de un arreglo o matriz de etiquetas
preds.
Preprocesar un color con un almacén de datos

código:
montage(imds)
Utilizamos la función
montage para mostrar % se crea una
las imágenes del representación
visual de una
almacén de datos imds.
cuadrícula que
muestra varias
imágenes del
objeto
imageDatastore
imds
% se crea un objeto augmentedImageDatastore
que toma el objeto
imageDatastore imds y aplica una transformación
de redimensionamiento
a todas las imágenes en el tamaño especi
Creamos un almacén de datos de
ficado [224 224].
imágenes aumentadas a partir del
% se especifica que el preprocesamiento de color
almacén de datos de imágenes imds.
se realizará
Preprocese las imágenes para que su
convirtiendo las imágenes en escala de grises a
tamaño sea de 224 por 224 por 3.
imágenes RGB.

Asigne al almacén de datos de imágenes


aumentadas el nombre auds.

código:
auds = augmentedImageDatastore([224
224],imds,"ColorPreprocessing","gray2rgb")
Preprocesar un color con un almacén de datos

código:
preds = classify(net,auds)
Clasificamos las preds = classify(net,auds)
imágenes de auds % se realiza la clasificación de
mediante la función las imágenes en el objeto
classify. GoogLeNet se augmentedImageDatastore
auds utilizando una red
almacena en la variable
neuronal net
net. Almacene las preentrenada.
predicciones en una % se devuelve las predicciones
variable preds. de clase para cada imagen en
forma de un arreglo o matriz
de etiquetas.
CREAR UN ALMACÉN DE
DATOS MEDIANTE
Permite acceder a las imágenes de
manera conveniente y realizar

SUBCARPETAS
operaciones de procesamiento y análisis
en conjunto utilizando las funciones y
herramientas de MATLAB
Código:
flwrds =
imageDatastore("Flowers","IncludeSubfolders",t
rue)
% se realiza la clasificación
Creamos un almacén de
de las imágenes en el objeto
datos flwrds para todas las augmentedImageDatastore
imágenes de las subcarpetas auds utilizando una red
de la carpeta "Flowers". neuronal net
preentrenada.
% se devuelve las
predicciones de clase para
cada imagen en
forma de un arreglo o matriz
de etiquetas
código:
resizeds = augmentedImageDatastore([224 224],flwrds)
Creamos un almacén de datos de % se crea un objeto
imágenes aumentadas a partir de
augmentedImageDatastor
flwrds que redimensione las e que toma el objeto
imágenes a 224 por 224. imageDatastore flwrds
Asignamos al nuevo almacén de % se aplica una
datos el nombre resizeds. transformación de
redimensionamiento a
todas las
imágenes en el tamaño
especificado [224 224]
código: preds = classify(net,resizeds)
Utilice GoogLeNet (cargada como % se realiza la clasificación
la variable net) para clasificar el de las imágenes en el objeto
contenido de todas las imágenes augmentedImageDatastore
del conjunto de datos. Almacene resizeds utilizando una red
los resultados en una variable neuronal net
preentrenada.
denominada preds.
% se devuelve las
predicciones de clase para
Tenga en cuenta que la función
cada imagen en
classify pasará 15 imágenes por forma de un arreglo o matriz
GoogLeNet. Puede tardar varios de etiquetas.
segundos en ejecutarse.
SIGUE PRACTICANDO
CÓDIGO: montage(flwrds)

%se visualiza el
conjunto de datos
MÓDULO 3:
REALIZACIÓN DE TRANSFERENCIA DEL
APRENDIZAJE
PROCESAMIENTO DE Al entrenar una red, se deben
proporcionar etiquetas conocidas para
IMÁGENES EN UN las imágenes de entrenamiento. La

ALMACÉN DE DATOS
carpeta Flowers contiene 5 subcarpetas;
cada una contiene más de 500 imágenes
de un tipo de flor. Por lo tanto, se puede
utilizar el nombre de la carpeta para
proporcionar las etiquetas necesarias
para el entrenamiento.
Etiquetar imágenes de entrenamiento
Código:
flwrds =
imageDatastore(pathToImages,"IncludeSubfolders"
,true,"LabelSource","foldernames")
e","foldernames")

Crear flwrds utilizando los


nombres de carpetas como %flwrds será un imageDatastore que contiene todas
las imágenes
etiquetas de las imágenes.
encontradas en el directorio y sus subcarpetas, con las
pathToImages ya existe en el etiquetas de clase correspondientes extraídas de los
espacio de trabajo. nombres de
las carpetas.
código: flowernames = flwrds.Labels

Extraiga la propiedad Labels de


flwrds a una variable denominada
flowernames.

% se usa la notación de puntos


para extraer la propiedad Labels
de flwrds y la designamos a la
variable flowernames.
SIGUE PRACTICANDO
CÓDIGO: categories(flowernames)

%para obtener las


categorías existentes en
el arreglo categórico de
etiquetas de imágenes
Durante el entrenamiento, los pesos de

DIVIDIR DATOS la red se ajustan para que aprenda a


asociar las entradas con las salidas

PARA
proporcionadas. pero incluso si la red
clasifica correctamente todos los datos
de entrenamiento ¿ a aprendido algo

ENTRENAMIENTO ealmente?
En esta sesión se usará la función

Y PRUEBAS
splitEachLabel para dividir las imágenes
de la carpeta Flowers en dos almacenes
de datos, uno para entrenamiento y otro
para pruebas.
Código: [flwrTrain,flwrTest] =
splitEachLabel(flwrds,0.6)

Divida el almacén de datos


flwrds en dos almacenes %se divide flwrds en conjuntos de
de datos, flwrTrain y entrenamiento y prueba. Donde 0.6
flwrTest, de manera que el indica que el 60% de las imágenes se
60% de los archivos de cada utilizarán para entrenamiento y
categoría esté en flwrTrain. el 40% restante se utilizará para
pruebas.
código:
[flwrTrain,flwrTest] =
Divida el almacén de datos splitEachLabel(flwrds,0.8,"randomized")
flwrds en dos almacenes
de datos, flwrTrain y %se divide flwrds en conjuntos de
flwrTest, de manera que entrenamiento y prueba. El
una selección aleatoria del 0.8 indica que el 80% de las
imágenes se utilizarán
80% de los archivos de cada
para entrenamiento y el 20% restante
categoría esté en flwrTrain.
se utilizará para pruebas.
código: [flwrTrain,flwrTest] =
splitEachLabel(flwrds,500)

Divida el almacén de datos


%se seleccionarán 500 imágenes de cada
flwrds en dos almacenes de
etiqueta para el conjunto de entrenamiento.
datos, flwrTrain y flwrTest, de
Los conjuntos de entrenamiento y prueba se
manera que 500 archivos de asignan a las variables
cada categoría estén en flwrTrain y flwrTest.
flwrTrain.
SIGUE PRACTICANDO
CÓDIGO: flowernames = flwrds.Labels
categories = unique(flowernames)
splits = splitEachLabel(flwrds, 0.7)
p = [0.6, 0.2, 0.7]
datasets = cell(size(p))
numDatasets = numel(datasets)

%obtenemos las
categorías únicas
presentes en el arreglo
flowernames. Luego
usamos splitEachLabel
para realizar la división
y estos conjuntos se
almacenan en la matriz
datasets .
MODIFICACIÓN
Modificar las capas de una red
previamente entrenada permite
adaptarla a nuevos problemas, realizar

DE LAS CAPAS transferencia de aprendizaje


aprovechando el conocimiento previo

DE LA RED
de la red y optimizar su rendimiento en
tareas específicas, también permite
ajustar la arquitectura de la red para
adaptarla a las necesidades específicas
del nuevo problema o conjunto de
datos.
En la página de inicio,
abra GoogLeNet.
Después, haga zoom
para ampliar las capas
finales de la
arquitectura para ver las
capas que se
modificarán en las
próximas tareas.
Añada una
fullyConnectedLayer
nueva (Convolution
and Fully Connected).
En el panel Properties,
establezca OutputSize
en 5 (para los 5 tipos
de flores).
Reemplace la última
capa totalmente
conectada de la red
por la nueva capa
recién creada. La capa
que debe reemplazar
se denomina
"loss3-classifier".
Cree una
classificationLayer
nueva (Output).
Reemplace la capa de
clasificación existente
por la capa nueva.
SIGUE PRACTICANDO
ESTABLECER CONTENIDO:

OPCIONES DE En esta sección aprenderemos a


controlar un entrenamiento de red con un

ENTRENAMIENTO
determinado algoritmo que presenta
ajustes opcionales como nombre-valor.

ESTA ES LA TERCERA SECCIÓN DEL


MÓDULO
%Entonces usamos la función
'trainingOptions' en SGDM y le asignamos
el nombre de 'opts'.

MATLAB nos brinda un código, el cual es un código:


ejemplo de como controlar un
entrenamiento de red especifico

código:

Además esta tarea nos pide crear una


variable llamada 'opts' usando el
algoritmo de entrenamiento para el
optimizador SGDM
%Usamos la función 'trainingOptions'
adicionandole la opción 'InitialLearnRate'
con valor de 0.001
código:
Se nos brinda un codigo donde se
especifica una cantidad ilimitada de
ajustes en la función 'trainingOptions'.

código:

Nos piden utilizar la opción


'InitialLearnRate' que debe
establecerse en 0.001
SIGUE PRACTICANDO

%Entonces creamos un algoritmo de


entrenamiento con el optimizador 'adam'
usando la función 'trainingOptions'.

código:
ENTRENAMIENTO
CONTENIDO:

En esta sección realizaremos una

DE LA RED
transferencia de aprendizaje para
obtener una red entrenada de forma
especifica

ESTA ES LA CUARTA SECCIÓN DEL


MÓDULO
SIGUE PRACTICANDO
%Luego
descargamos
archivos del curso
dando click en el
simbolo de pregunta
y encontramos el
script
'trainflowers.mlx'

%Por ultimo damos


click en 5 Flower
Dataset y
%Primero buscamos el codigo que use la descargamos los
función 'trainingOptions' y ajustamos propiedad datos de flores.
agregando "Plots" en "training-progress"

código:
EVALUACIÓN
DEL
CONTENIDO:

En esta sección que se subdivide en dos

RENDIMIENTO
partes usaremos la variable 'info' y la
función 'classify'.
Además analizaremos el rendimiento de
las predicciones elaboradas.

La variable flowernet contiene la red obtenida al


realizar la transferencia del aprendizaje con los
datos de las especies de flores.

ESTA ES LA QUINTA SECCIÓN DEL


MÓDULO
EVALUAR EL ENTRENAMIENTO Y EL RENDIMIENTO DE LA PRUEBA

%Entonces usamos el comando 'plot' en la


variable info de campo 'TrainingLoss' .

código:
Se nos pide graficar la pérdida de
entrenamiento almacenada en el campo
'TrainingLoss' de 'info'.
Recordemos que 'info' es una estructura
que contiene información sobre el
entrenamiento.
código:
Nos piden utilizar la función 'classify' para
obtener las clasificaciones de 'flowernet'
de los datos 'resizeTestImgs'.

%Usamos la función 'classify' con flowernet


y resizeTestImgs. Además asignamos el
nombre de 'flwrPreds' a la salida.
SIGUE PRACTICANDO

%Tratamos de comparar las predicciones con


los valores reales mediante una grafica usando
el comando 'plot'

código:
INVESTIGAR EL RENDIMIENTO DE LA PRUEBA

código:
Se nos pide extraer la propiedad 'Labels'
del almacén de datos 'testImgs'

%Entonces usamos una notación de


puntos con testImgs y Labels ,
asignandole el nombre de 'flwrActual'
%Usamos la función 'nnz' y el
MATLAB nos brinda un código, el cual es un operador(==) con 'flwrPreds' y 'flwrActual'.
ejemplo para determinar el número de Al final le asignamos el nombre de
elementos de dos arreglos que coinciden. 'numCorrect'
código:
código:

Además usar 'nnz' para contar cuántas


clasificaciones de 'flwrPreds' coinciden
con la clasificación correcta 'flwrActual'.
Se nos pide dividir 'numCorrect' por el
número de imágenes de prueba para código:
calcular la fracción de imágenes de
prueba clasificadas correctamente.

%Entonces dividimos la variable


'numCorrect entre la función numel que
establece el número de imágenes de
flwrPreds
%Entonces usamos la función confusionchart
con los datos de flwrPreds almacenado en
flwrActual.
MATLAB nos brinda un código, el cual
código:
calcula y muestra la matriz de confusión
para las clasificaciones previstas.

código:

Además nos piden crear la matriz de


confusión para los datos de prueba de
flores en el arreglo 'flwrPreds'
SIGUE PRACTICANDO
%Analizaremos la segunda
imagen clasificada
erroneamente copiando el
código brindado por MATLAB.

código:
INTEGRANTES:

-Solano Tuero Leydi Alondra


-Chumbimuni Ricci Cristina
-Puchure Vargas Mayte Regina
-Candia Prado Selene Darlyn

También podría gustarte