Пример #1
0
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()
Пример #2
0
                                                  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))