def modelo(): vgg = applications.vgg16.VGG16() cnn = Sequential() for capa in vgg.layers: cnn.add(capa) cnn.pop() for layer in cnn.layers: layer.trainable = False cnn.add(Dense(11, activation='softmax')) return cnn
def createVGG19Model(): ## Iniciacion de la red VGG19 y de una red sequencial. vgg19Model = vgg19.VGG19() sequentialModel = Sequential() ## Añadidas todas las capas de la red neuronal VGG19 a la red sequencial para poder trabajar con ella. for capa in vgg19Model.layers: sequentialModel.add(capa) ## Extraccion de la ultima capa del modelo, la capa predictiva. sequentialModel.pop() ## Al tratarse de un modelo prentrenado, evitamos que posteriormente se vuelva a entrenar, ahorrandonos mucho tiempo. for capa in sequentialModel.layers: capa.trainable = False ## Finalmente añadimos una capa de decision con dos neuronas y una funcion de activacion softmax. sequentialModel.add(Dense(2, activation='softmax')) ## Devolvemos el modelo personalizado. return sequentialModel
#Creación VGG16 propia denominada cnn_micro cnn_micro=Sequential() for capa in vgg.layers: cnn_micro.add (capa) # In[5]: cnn_micro.summary() # In[6]: cnn_micro.pop() # In[7]: cnn_micro.summary() # In[8]: #Las capas ya entrenadas de la VGG16 no vuelven a entrenarse para reutilizar el entrenamiento en la segmentación y detección de las imágenes en bruto for layer in cnn_micro.layers: layer.trainable=False
clases = 3 #with CustomObjectScope({'GlorotUniform': glorot_uniform()}): # cnn = load_model(modelo) #cnn = load_model(modelo) #cargamos los archivos que generamos para poder reutilizar nuestra red neuronal #cnn.load_weights(pesos_modelo) #model = InceptionV3(weights='imagenet', include_top=True) #original vgg = applications.vgg16.VGG16() cnn = Sequential() for capa in vgg.layers: cnn.add(capa) cnn.pop() for layer in cnn.layers: layer.trainable = False cnn.add(Dense(clases, activation='softmax')) cnn.load_weights( pesos_modelo ) # Cargamos todo el Aprendizaje ya hecho por nuestra red neuronal en variable cnn # a partir de aqui , def Predict (file) ............ ''' with CustomObjectScope({'GlorotUniform': glorot_uniform()}): cnn = load_model(modelo) cnn.load_weights(pesos_modelo) '''
def VGG_16(spatial_size, classes, channels, channel_first=True, weights_path=None): model = Sequential() if channel_first: model.add( ZeroPadding2D((1, 1), input_shape=(channels, spatial_size, spatial_size))) else: model.add( ZeroPadding2D((1, 1), input_shape=(spatial_size, spatial_size, channels))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(256, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(256, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(256, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(512, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(512, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(512, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(512, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(512, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(512, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) # 33 model.add(Flatten()) model.add(Dense(4096, activation='relu')) # 34 model.add(Dropout(0.5)) model.add(Dense(4096, activation='relu')) # 35 model.add(Dropout(0.5)) model.add(Dense(2622, activation='softmax')) # Dropped if weights_path: model.load_weights(weights_path) model.pop() model.add(Dense(classes, activation='softmax')) # 36 return model