Inteligencia Artificial - Como ampliar el conocimiento de mi red neuronal

 
Vista:

Como ampliar el conocimiento de mi red neuronal

Publicado por Hector (1 intervención) el 12/12/2020 22:14:41
Estoy empezando en el mundo de la Inteligencia Artificial con python y tensorflow entre otros, y he programado una red neuronal convolucional (cnn) que clasifica entre perros gatos y gorilas, pero ahora quiero que aparte de esto también diferencie coches y motos, todo junto a estos 3 anteriores. Entonces, mi pregunta es: ¿Cómo puedo hacer que aprenda solamente a diferenciar entre estos dos nuevos casos sin tener que volver a aprender a diferenciar perros, gatos y gorilas? ya que son muchísimas imágenes y entrenar de nuevo esos 3 tipos le puede llevar horas, existe alguna forma de que solamente aprenda estos dos tipos nuevos??
Este es mi código actual:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import sys
import os
from PIL import Image
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
from tensorflow.python.keras import optimizers, layers, models
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dropout, Flatten, Dense, Activation
from tensorflow.python.keras.layers import Convolution2D, MaxPooling2D
from tensorflow.python.keras import backend as K
 
K.clear_session()
data_train = './img/entrenamiento'
data_test = './img/test'
 
epochs = 20
steps_per_epoch = 1000
altura, longitud = 100, 100
batch_size = 32
steps_validation = 200
filtroConv1 = 32
filtroConv2 = 64
filtroConv1_size = (3,3)
filtroConv2_size = (2,2)
pool_size = (2,2)
tipos_imagen = 3
lr = 0.0005
train_labels = ['perro', 'gato', 'gorila']
test_labels = ['perro', 'gato', 'gorila']
 
entrenamiento_datagen = ImageDataGenerator(
    rescale = 1./255,
    shear_range = 0.2,
    zoom_range = 0.2,
    horizontal_flip = True
)
 
validacion_datagen = ImageDataGenerator(
    rescale = 1./255
)
 
train_images = entrenamiento_datagen.flow_from_directory(
    data_train,
    target_size = (altura, longitud),
    batch_size = batch_size,
    class_mode = 'categorical'
)
 
test_images = validacion_datagen.flow_from_directory(
    data_test,
    target_size = (altura, longitud),
    batch_size = batch_size,
    class_mode = 'categorical'
)
 
cnn = models.Sequential()
 
cnn.add(Convolution2D(filtroConv1, filtroConv1_size, padding = 'same', input_shape = (altura, longitud, 3), activation = 'relu'))
cnn.add(MaxPooling2D(pool_size = pool_size))
 
cnn.add(Convolution2D(filtroConv2, filtroConv2_size, padding = 'same'))
cnn.add(MaxPooling2D(pool_size = pool_size))
 
cnn.add(Flatten())
cnn.add(Dense(256, activation = 'relu'))
 
cnn.add(Dropout(0.5))
cnn.add(Dense(tipos_imagen, activation = 'softmax'))
 
cnn.compile(loss = 'categorical_crossentropy', optimizer = tf.keras.optimizers.Adam(learning_rate = lr), metrics = ['accuracy'])
 
history = cnn.fit(train_images, epochs = epochs, validation_data = test_images)
 
print(train_images.class_indices)
 
dir = './model/'
 
if not os.path.exists(dir):
    os.mkdir(dir)
 
cnn.save('./model/model.h5')
cnn.save_weights('./model/pesos.h5')

¿Alguien sabe como puedo hacer que aprenda ahora de nuevo con motos y coches, actualizando el modelo con sus pesos sin tener que volver a aprender todo? Muchas gracias de verdad.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder