﻿1
00:00:02,620 --> 00:00:10,980
Vamos a comenzar a hacer nuestro modelo

2
00:00:10,980 --> 00:00:12,940
y lo haremos igual que en la lección anterior,

3
00:00:13,380 --> 00:00:15,400
especificando tf.keras.sequential.

4
00:00:17,060 --> 00:00:19,080
Abrimos paréntesis y abrimos corchetes

5
00:00:19,140 --> 00:00:21,080
para especificar las distintas capas.

6
00:00:21,460 --> 00:00:23,960
Ahora, aquí tenemos un caso especial.

7
00:00:24,220 --> 00:00:26,420
Estamos hablando de que tenemos imágenes,

8
00:00:26,560 --> 00:00:34,600
yo puedo meter una imagen a una red neuronal y lo que hacemos es que si tenemos 28 píxeles por 28 píxeles,

9
00:00:34,760 --> 00:00:38,820
técnicamente podemos poner todos en una sola columna de arriba hacia abajo,

10
00:00:39,040 --> 00:00:41,020
tomando por ejemplo todos los de la columna 1.

11
00:00:41,460 --> 00:00:43,180
Luego la columna 2 la pasamos aquí abajo,

12
00:00:43,580 --> 00:00:44,960
la columna 3 la pasamos abajo,

13
00:00:45,120 --> 00:00:45,200
etc.

14
00:00:45,420 --> 00:00:48,500
Hasta que en lugar de tener 28 por 28,

15
00:00:49,060 --> 00:00:55,240
tenemos 784 píxeles desde arriba hasta abajo para representar la imagen.

16
00:00:55,280 --> 00:00:59,100
Y cada uno de esos píxeles va a ser una entrada,

17
00:00:59,260 --> 00:01:00,220
así como en la anterior

18
00:01:00,220 --> 00:01:01,680
teníamos una sola entrada,

19
00:01:01,840 --> 00:01:02,800
que eran los grados Celsius.

20
00:01:03,040 --> 00:01:06,300
Y en el ejemplo que vimos de ir al concierto teníamos 3,

21
00:01:06,500 --> 00:01:10,340
ahora vamos a tener 784 datos de entrada,

22
00:01:10,760 --> 00:01:13,480
lo cual es mucho más de lo que hemos hecho hasta el momento.

23
00:01:13,940 --> 00:01:19,220
Cuando tenemos datos en una forma distinta a simplemente una columna o vector con todos los datos,

24
00:01:19,220 --> 00:01:24,320
podemos utilizar tf.keras.layers.flatten,

25
00:01:24,800 --> 00:01:27,120
flatten tal cual quiere decir como aplanar,

26
00:01:27,260 --> 00:01:29,340
para que si tienes como aquí algo cuadrado,

27
00:01:29,460 --> 00:01:31,880
lo aplane a una sola columna o vector.

28
00:01:32,280 --> 00:01:34,460
Y le decimos ahora sí cuál es la forma de la entrada,

29
00:01:34,700 --> 00:01:37,940
tenemos input shape y le tenemos que especificar 28

30
00:01:38,100 --> 00:01:41,700
,28,1, que es la forma que nos dice el set de datos,

31
00:01:41,860 --> 00:01:43,000
de hecho lo puedo especificar aquí,

32
00:01:43,180 --> 00:01:44,200
1 es porque es blanco y negro.

33
00:01:44,300 --> 00:01:49,320
Y después aquí podemos agregar todas las capas que queremos,

34
00:01:49,580 --> 00:01:50,640
así como vimos en la

35
00:01:50,800 --> 00:01:54,340
explicación donde tenemos un perceptron multicapa o red neuronal,

36
00:01:54,500 --> 00:01:59,900
podemos agregarle muchas capas para que estén haciendo cada vez más y más operaciones y todos esos parámetros

37
00:01:59,900 --> 00:02:05,020
que le agregamos se van a estar ajustando de manera automática gracias al proceso de optimización.

38
00:02:05,380 --> 00:02:07,300
Entonces vamos a comenzar con algo excesivamente simple,

39
00:02:07,860 --> 00:02:11,100
vamos a poner tf.keras.layers.dense,

40
00:02:11,900 --> 00:02:14,160
similar a como lo hemos manejado en la lección

41
00:02:14,160 --> 00:02:16,920
anterior y vamos a dejarle una sola neurona,

42
00:02:17,080 --> 00:02:18,680
en un momento lo hacemos más interesante.

43
00:02:19,260 --> 00:02:21,080
Y ahora si viene la capa de salida,

44
00:02:21,380 --> 00:02:23,800
en este caso tenemos una capa de entrada,

45
00:02:24,380 --> 00:02:26,280
una capa en medio que es para

46
00:02:26,280 --> 00:02:31,620
que tenga digamos más opciones para estar haciendo operaciones y esta es la llamada capa

47
00:02:32,300 --> 00:02:32,680
oculta,

48
00:02:33,120 --> 00:02:37,360
todas las capas que no sean la capa de entrada o la capa de salida se les llama capa oculta,

49
00:02:37,580 --> 00:02:39,600
en realidad no tiene nada más especial que eso.

50
00:02:39,960 --> 00:02:42,320
Y la capa de salida va a tener algo muy especial,

51
00:02:42,560 --> 00:02:45,380
vamos a especificar nuevamente tf.keras.layers.

52
00:02:45,820 --> 00:02:46,800
Y también va a ser densa,

53
00:02:47,060 --> 00:02:48,580
pero aquí como es la capa de salida,

54
00:02:49,080 --> 00:02:52,380
queremos que nos clasifique en 10 opciones distintas,

55
00:02:52,600 --> 00:02:55,180
ya sea del número 0 hasta el número 9.

56
00:02:55,420 --> 00:03:01,660
Y en redes neuronales cuando queremos hacer una clasificación necesitamos especificar una función de activación,

57
00:03:01,660 --> 00:03:08,880
especificando activation y la que usamos para clasificación normalmente es tf.nn.softmax.

58
00:03:09,660 --> 00:03:10,960
Puedes leer más al respecto,

59
00:03:11,160 --> 00:03:13,660
pero softmax básicamente lo que se encarga es que de las

60
00:03:13,660 --> 00:03:15,000
10 neuronas de salida,

61
00:03:15,340 --> 00:03:16,700
vamos a decir que es el número 5,

62
00:03:17,280 --> 00:03:19,120
lo que busca es que el resto de las

63
00:03:19,120 --> 00:03:24,820
neuronas que representan del 0 al 4 y del 6 al 9 tengan números muy pequeños .01,

64
00:03:25,180 --> 00:03:26,040
.02, etc.

65
00:03:26,240 --> 00:03:29,360
Y la que tiene el resultado que queremos tenga un número muy grande.

66
00:03:29,800 --> 00:03:30,480
Entonces lo que podemos hacer

67
00:03:30,560 --> 00:03:33,880
siempre que queremos predecir es ver todas las 10 neuronas de salida,

68
00:03:34,240 --> 00:03:35,540
ver cuál tiene el número mayor

69
00:03:35,540 --> 00:03:38,460
y entonces esa es la predicción que nos está dando.

70
00:03:38,920 --> 00:03:40,680
Pero va a ser mejor verlo en acción.

71
00:03:40,920 --> 00:03:43,540
Vamos a crear el modelo a ver si no se me olvidó algo.

72
00:03:43,780 --> 00:03:44,420
Perfecto.

73
00:03:44,580 --> 00:03:45,960
Y ahora sí vamos a compilarlo.

74
00:03:46,340 --> 00:03:47,620
Modelo.compile.

75
00:03:47,960 --> 00:03:52,920
Aquí vamos a especificar el optimizador con optimizer y otra forma de especificarlo es

76
00:03:52,920 --> 00:03:57,860
simplemente decirle adam, en caso que no vayamos de momento a ajustar la tasa de aprendizaje.

77
00:03:58,400 --> 00:04:03,740
Ahora la pérdida es diferente siempre que queremos hacer una red de clasificación.

78
00:04:04,140 --> 00:04:08,260
En este caso que estamos utilizando softmax tenemos que especificar otra pérdida.

79
00:04:08,380 --> 00:04:10,120
En este caso escribiremos TF,

80
00:04:10,500 --> 00:04:10,880
Keras,

81
00:04:11,380 --> 00:04:15,260
Loses y tiene un nombre medio complicado que es Sparse

82
00:04:15,900 --> 00:04:18,220
Categorical Cross Entropy.

83
00:04:20,260 --> 00:04:23,760
Que en resumen le permite al modelo de clasificación ajustarse de manera

84
00:04:23,760 --> 00:04:27,620
adecuada cuando estamos haciendo una clasificación en lugar de una regresión.

85
00:04:28,080 --> 00:04:29,160
Y voy a agregar un dato

86
00:04:29,160 --> 00:04:31,980
adicional que no pusimos la vez pasada que es Metrix.

87
00:04:32,520 --> 00:04:35,320
Puedo poner Metrix y con una lista darle

88
00:04:35,320 --> 00:04:35,980
opciones.

89
00:04:36,140 --> 00:04:39,900
Por ejemplo aquí le voy a poner accuracy porque quiero que durante el entrenamiento me esté

90
00:04:39,900 --> 00:04:43,000
diciendo cuál es la exactitud del modelo.

91
00:04:43,660 --> 00:04:46,420
Vamos a ejecutarlo para que compile el modelo y ahora

92
00:04:46,420 --> 00:04:49,200
tenemos que hacer un poco de preprocesamiento adicional.

93
00:04:50,180 --> 00:04:51,780
Como diferencia del anterior que

94
00:04:51,860 --> 00:04:54,180
teníamos muy pocos datos 7,

95
00:04:54,640 --> 00:05:03,800
este tenemos 70 mil y eso hace que necesitemos hacer algunas optimizaciones para que funcione de manera correcta y no se le acabe la memoria ni se tarde tanto.

96
00:05:04,140 --> 00:05:06,500
Una de las cosas es especificar un tamaño,

97
00:05:06,940 --> 00:05:10,040
por ejemplo escribiendo tamaño de lote y le voy a poner 32.

98
00:05:10,200 --> 00:05:11,420
Muchas veces se utiliza 32,

99
00:05:11,580 --> 00:05:11,760
64, etc.

100
00:05:11,760 --> 00:05:15,800
Y esto nos dice que en lugar de que el modelo vaya una por una,

101
00:05:15,960 --> 00:05:20,540
lo haga digamos en lotes de 32 en 32 y se haga más eficiente.

102
00:05:20,980 --> 00:05:23,480
Y otra cosa que voy a hacer es por ejemplo especificar datos,

103
00:05:23,720 --> 00:05:25,740
entrenamiento igual a datos,

104
00:05:26,040 --> 00:05:28,060
entrenamiento, punto repeat.

105
00:05:28,360 --> 00:05:33,500
Esto lo que quiere decir es que una vez que llega al final de los digamos 60 mil datos de entrenamiento,

106
00:05:34,000 --> 00:05:34,900
vuelva a empezar.

107
00:05:35,220 --> 00:05:37,600
Es decir que no termine y diga ya no tengo datos.

108
00:05:38,060 --> 00:05:42,920
Otra cosa es que podemos hacer shuffle en lugar de que vengan tal cual como el set que descargamos.

109
00:05:43,080 --> 00:05:45,660
Esto los va a reorganizar de manera aleatoria,

110
00:05:45,820 --> 00:05:48,580
solo que tenemos que especificarle el número de datos que tenemos,

111
00:05:48,700 --> 00:05:49,680
que son 60 mil.

112
00:05:50,180 --> 00:05:56,940
Y finalmente le voy a especificar batch para que trabaje en lotes diciéndole el tamaño del lote.

113
00:05:57,000 --> 00:05:58,860
En el caso de los datos de pruebas,

114
00:05:58,980 --> 00:06:01,960
no tenemos que ni repetirlo ni reorganizarlo.

115
00:06:01,960 --> 00:06:03,120
Realmente no es mucho problema.

116
00:06:03,260 --> 00:06:04,560
Podemos dejarlo solo como datos,

117
00:06:04,680 --> 00:06:07,940
entrenamiento punto batch con el tamaño del lote.

118
00:06:08,460 --> 00:06:12,540
Algo que hice aquí que probablemente después me iba a dar cuenta es que puse

119
00:06:12,540 --> 00:06:15,060
datos entrenamiento, entonces lo cambiamos a datos de pruebas,

120
00:06:15,500 --> 00:06:16,760
lo ejecutamos y ya

121
00:06:16,760 --> 00:06:19,980
estamos listos para hacer el entrenamiento y ver cómo le va.

122
00:06:20,380 --> 00:06:23,880
Primero que nada necesitamos importar math porque lo vamos a usar en un momento

123
00:06:23,880 --> 00:06:25,800
y ahora sí vamos a entrenar.

124
00:06:26,240 --> 00:06:31,640
Vamos a escribir algo como entrenamiento igual a modelo punto fit y le vamos a dar

125
00:06:31,640 --> 00:06:54,040
lo mismo a 있�arlo en y donde sea posible sobre a dónde vamos a poner nuestro punto

126
00:06:54,040 --> 00:06:54,340
otro, puede que sea de 300.

127
00:06:54,340 --> 00:06:54,720
No lo creo, pero creo que es parte de la discriminación pública. Entonces vamos a hacer unuche tu grupo de niveles, vamos a institutionalizar un grupo de nivel continuado y estos niveles también lo abrimos a belinda y de accumulate,

128
00:06:54,780 --> 00:06:55,120
eso tendrá su partido estratégico currency, vamos a escribir aquí un i.

129
00:06:55,120 --> 00:06:55,840
Y terminamos outcome psychologist que nada más es mi apresentación de las teachings

130
00:06:55,840 --> 00:06:58,660
del IIT estoy fechas en

131
00:06:59,880 --> 00:07:01,220
titulares 14 de octubre,

132
00:07:01,220 --> 00:07:01,400
exhibited ahí en la página web. Y vamos a hacer un test de obtener el número de ejemplos de entrenamiento,

133
00:07:01,400 --> 00:07:02,380
el sensor flow iba a quitar,

134
00:07:02,460 --> 00:07:03,920
que me parece que todavía no ha quitado,

135
00:07:04,280 --> 00:07:09,060
en donde cuando trabajamos por lotes tenemos que darle un dato que es más punto

136
00:07:09,060 --> 00:07:13,200
sale dividiendo el número de ejemplos de entrenamiento que estamos utilizando

137
00:07:13,200 --> 00:07:17,840
entre el tamaño del lote solamente para que sepa bien cómo optimizarse cuando

138
00:07:17,840 --> 00:07:23,380
está trabajando con lotes y ahora sí vamos a comenzar el entrenamiento y aquí

139
00:07:23,380 --> 00:07:27,960
me equivoqué en lugar de si él es sale y quiere decir ceiling o techo que es para

140
00:07:28,020 --> 00:07:32,860
redondear números hacia arriba entonces ahora sí vamos a ejecutar el entrenamiento y como

141
00:07:32,860 --> 00:07:37,880
puedes ver esta vez se va a tardar un ratito más una vez que empiece nos va a estar diciendo

142
00:07:37,880 --> 00:07:42,480
cuál es su precisión por ejemplo estamos comenzando perdón con una exactitud de punto

143
00:07:42,480 --> 00:07:47,900
25 es decir el 25 por ciento lo está obteniendo bien después en la segunda época ya que

144
00:07:47,900 --> 00:07:55,040
se ajustó subió a 31 aquí subió a 33 y aquí a 36 etcétera pero finalmente son números muy

145
00:07:55,040 --> 00:08:01,180
pequeños en realidad podemos mejorar esto muchísimo para que en lugar de que ronde alrededor del 38

146
00:08:01,180 --> 00:08:08,340
por ciento suba algo como al 90 o 99 por ciento incluso pero para eso tenemos que ver dos cosas

147
00:08:08,340 --> 00:08:14,240
adicionales la primera es que ahora sí podemos ver que tener más capas en problemas más complejos

148
00:08:14,460 --> 00:08:23,060
hacen que funcione mejor esto no siempre es el caso pero finalmente si estamos hablando de clasificar imágenes y tenemos 784 datos de entrada

149
00:08:23,060 --> 00:08:31,940
tener más parámetros ajustables van a hacer que la red funcione mejor entonces voy a agregar dos capas densas cada una con 50 neuronas

150
00:08:32,300 --> 00:08:39,980
vamos a crear el modelo compilarlo nuevamente y voy a saltar esto para irme al entrenamiento directamente y ver qué tal le va

151
00:08:40,720 --> 00:08:47,260
como puedes ver desde el prácticamente inicio ya está en 89 por ciento 91 etcétera entonces vamos a ver cómo termina

152
00:08:48,100 --> 00:08:51,940
está terminando y quedó en alrededor de 92 por ciento

153
00:08:52,500 --> 00:08:54,360
y esto nos lleva a algo que comentábamos

154
00:08:54,500 --> 00:09:01,360
hace un momento estamos utilizando capas pero las neuronas no tienen aquí función de activación es

155
00:09:01,360 --> 00:09:06,840
decir son lineales y si queremos que logre ajustarse de una manera mucho mejor es decir

156
00:09:06,840 --> 00:09:12,200
que no necesita ser forzosamente lineal sino que puede hacer todo tipo de cosas podemos especificar

157
00:09:12,340 --> 00:09:18,920
una activación vamos a poner activación igual a tf punto nn punto relo reluce el que comenté que

158
00:09:18,920 --> 00:09:25,580
para números negativos da cero y para positivos da ese mismo número y es de los más utilizados actualmente vamos a

159
00:09:26,160 --> 00:09:29,880
ejecutar el modelo otra vez lo compilamos y vamos a correr el entrenamiento

160
00:09:29,880 --> 00:09:36,060
de nuevo a ver hasta qué exactitud logramos llegar ya está en la época 9 ya está por terminar y

161
00:09:36,060 --> 00:09:41,240
tenemos 98 por ciento es decir logramos que nuestro modelo de clasificación

162
00:09:41,480 --> 00:09:46,800
clasifique números escritos a mano y logramos que llegar hasta un 98 casi 99

163
00:09:47,000 --> 00:09:52,860
por ciento de exactitud ahora podemos nosotros aquí hacer algunas cosas hay un

164
00:09:53,000 --> 00:09:56,880
código que podemos utilizar pero escribirlo aquí está fuera del alcance

165
00:09:57,000 --> 00:10:03,520
del curso porque lo que hace es utilizar paiplot para poder mostrar imágenes y nos

166
00:10:03,520 --> 00:10:09,600
dice cuál fue la predicción y si fue correcta o no voy a dejar este código como uno de los recursos

167
00:10:09,600 --> 00:10:14,760
adicionales de la lección para que literalmente sólo lo copies lo pegues y al ejecutarlo te muestra

168
00:10:14,760 --> 00:10:21,100
algo como esto en donde puedes ver cuáles clasificó de manera correcta en este caso prácticamente todos

169
00:10:21,100 --> 00:10:22,560
los tiene de manera correcta

170
00:10:23,420 --> 00:10:26,800
si tomamos nosotros este modelo y lo desplegamos en algún lugar en

171
00:10:26,800 --> 00:10:33,200
donde alguien escriba números a mano podemos utilizarlo para hacernos otros clasificaciones sin

172
00:10:33,920 --> 00:10:47,940
embargo este modelo aunque nos esté clasificando casi 99% correcto tiene algunas limitantes ya que principalmente lo que hace digamos es que si ciertos píxeles están en cierto lugar dice debe ser un 6 debe ser un 5 etc.

173
00:10:48,460 --> 00:10:59,240
sin embargo si el set tuviera digamos un 5 muy pequeño aquí en la esquina o números de diferente tamaño batallaría en poder predecir bien porque no están los píxeles donde deben de estar

174
00:10:59,240 --> 00:11:05,600
las redes densas que estamos utilizando son buenas para trabajar con características sin embargo es muy

175
00:11:05,600 --> 00:11:09,700
distinto si tú tienes un modelo que quieres por ejemplo predecir el precio de una casa y las

176
00:11:09,700 --> 00:11:13,940
características son el número de cuartos número de baños etcétera siempre donde están esas

177
00:11:13,940 --> 00:11:18,880
características es en el mismo lugar las mismas entradas siempre quieren decir lo mismo pero en el

178
00:11:18,880 --> 00:11:23,620
caso de las imágenes no en este caso la mayoría de los 6 es probablemente van a tener píxeles por

179
00:11:23,620 --> 00:11:29,060
este rango entonces siempre que haya píxeles aquí aquí aquí etcétera lo detecta como un 6 pero luego

180
00:11:29,060 --> 00:11:33,020
si pongo un 6 acá abajo donde nunca ha visto píxeles negros no vas a ver de qué números

181
00:11:33,300 --> 00:11:38,340
estamos hablando entonces las redes neuronales densas nos sirven principalmente cuando tenemos

182
00:11:38,740 --> 00:11:42,960
tablas de información de la cual podemos derivar cosas pero si queremos trabajar con

183
00:11:43,100 --> 00:11:48,720
imágenes vamos a ver en la siguiente lección es una manera mucho más eficiente de hacerlo

184
00:11:51,540 --> 00:11:55,240
ahora que creaste una red neuronal de clasificación en la siguiente lección hablaremos acerca

185
00:11:55,320 --> 00:11:56,920
de las convoluciones y filtros


