def compute_embeddings_pretrained(parameters, train_X, val_X, test=None): if parameters['cnn'] == 'vgg': cnn_model = vgg19.VGG19(weights='imagenet', pooling='avg') cnn = Model(inputs=cnn_model.input, outputs=cnn_model.get_layer('fc2').output) if parameters['cnn'] == 'resnet': #cnn = resnet50.ResNet50(weights='imagenet',include_top=False,pooling=parameters['pool']) #cnn = Model(inputs=cnn_model.input, outputs=cnn_model.get_layer('').output) cnn = resnet.ResNet101(include_top=False, weights='imagenet', pooling='avg') if parameters['cnn'] == 'inc_resnet': cnn = inception_resnet_v2.InceptionResNetV2(weights='imagenet', include_top=False, pooling=parameters['pool']) #cnn = Model(inputs=cnn_model.input, outputs=cnn_model.get_layer('').output) if parameters['cnn'] == 'densenet': cnn = densenet.DenseNet121(weights='imagenet', include_top=False, pooling=parameters['pool']) if parameters['cnn'] == 'xception': cnn = xception.Xception(weights='imagenet', include_top=False, pooling=parameters['pool']) ''' if parameters['freeze']: for layer in cnn.layers: layer.trainable = False print ('TRAINABLE LAYERS: ') for layer in cnn.layers: print(layer, layer.trainable) ''' embeddings_train = cnn.predict(train_X) embeddings_val = cnn.predict(val_X) print('Dim embeddings train: %s', str(embeddings_train.shape)) print('Dim embeddings val: %s', str(embeddings_val.shape)) if test is not None: embeddings_test = {} for k, v in test.items(): if parameters['cnn'] == 'resnet': embeddings_test[k] = cnn.predict(v) #.reshape((2048,-1)) elif parameters['cnn'] == 'inc_resnet': embeddings_test[k] = cnn.predict(v) #.reshape((1536,-1)) elif parameters['cnn'] == 'xception': embeddings_test[k] = cnn.predict(v) #.reshape((,-1)) else: embeddings_test[k] = cnn.predict(v) #.reshape((1024,-1)) with open(parameters['embeddings_pretrained_test'], 'wb') as f: pickle.dump(embeddings_test, f, protocol=pickle.HIGHEST_PROTOCOL) print('Dim embeddings test: %s', str(len(embeddings_test))) return embeddings_train.squeeze(), embeddings_val.squeeze()
input_shape=img_dims) elif model_name in ['vgg16', 'VGG16']: model = vgg16.VGG16(include_top=False, weights='imagenet', input_shape=img_dims) elif model_name in ['vgg19', 'VGG19']: model = vgg19.VGG19(include_top=False, weights='imagenet', input_shape=img_dims) elif model_name in ['resnet50', 'ResNet50']: model = ResNet50(include_top=False, weights='imagenet', input_shape=img_dims) elif model_name in ['resnet101', 'ResNet101']: model = resnet.ResNet101(include_top=False, weights='imagenet', input_shape=img_dims) # print(model.summary()) #fine tuning output = model.layers[-1].output output = keras.layers.Flatten()(output) i = 0 new_model = Model(model.input, output=output) for layer in new_model.layers: layer.trainable = True model = Sequential() model.add(new_model) model.add(Dense(img_dims[0], activation='relu', input_dim=img_dims)) model.add(Dropout(0.3))