def save_bottleneck_features(): model = MobileNet(include_top=False, weights='imagenet', input_shape=(150, 150, 3)) print('load model ok') datagen = ImageDataGenerator(rescale=1. / 255) # train set image generator train_generator = datagen.flow_from_directory( '/data/lebron/data/mytrain', target_size=(150, 150), batch_size=batch_size, class_mode=None, shuffle=False ) # test set image generator test_generator = datagen.flow_from_directory( '/data/lebron/data/mytest', target_size=(150, 150), batch_size=batch_size, class_mode=None, shuffle=False ) # load weight model.load_weights(WEIGHTS_PATH_NO_TOP) print('load weight ok') # get bottleneck feature bottleneck_features_train = model.predict_generator(train_generator, 10) np.save(save_train_path, bottleneck_features_train) bottleneck_features_validation = model.predict_generator(test_generator, 2) np.save(save_test_path, bottleneck_features_validation)
include_top=False, weights='imagenet') # Apply the same prerposessing used in MobileNet net datagen = ImageDataGenerator(preprocessing_function=preprocess_input) # data generator for training images generator = datagen.flow_from_directory(TRAIN_DATA_DIR, target_size=(IMG_WIDTH, IMG_HEIGHT), batch_size=1, class_mode=None, shuffle=False) print('Extracting training features with MobileNet:') bottleneck_features_train = model.predict_generator(generator, steps=len( generator.filenames), verbose=1) # Save the indices for reference in the prediction step np.save('class_indices.npy', generator.class_indices) np.save('bottleneck_features_train.npy', bottleneck_features_train) np.save('train_labels.npy', generator.classes) # data generator for validation images generator = datagen.flow_from_directory(VALIDATION_DATA_DIR, target_size=(IMG_WIDTH, IMG_HEIGHT), batch_size=1, class_mode=None, shuffle=False)
from keras.applications.mobilenet import MobileNet from keras.preprocessing.image import load_img, img_to_array, ImageDataGenerator from keras.layers import Dense, Flatten from keras.models import Model, load_model import numpy as np from sklearn.cluster import KMeans img_path = './img' img_data_gen = ImageDataGenerator(rescale=1. / 255) img_gen = img_data_gen.flow_from_directory(img_path, target_size=(224, 224), batch_size=1) m = MobileNet() #m = load_model(model_path) #out = Dense(64, activation='softmax') #out = out(m.layers[-1].output) #m2 = Model(m.input, out) x = m.predict_generator(img_gen, steps=20, verbose=1) kmeans = KMeans(n_clusters=4) pred = kmeans.fit_predict(x) print(pred)
batch_size=BATCH_SIZE, class_mode='categorical', subset='training', shuffle=False) validate_generator = data_gen.flow_from_directory(dataset_path, target_size=(IMAGE_SIZE, IMAGE_SIZE), batch_size=BATCH_SIZE, class_mode='categorical', subset='validation', shuffle=False) print(" Extract bottleneck features...") # Get bottle neck features in numpay arrays from convolution part of model bottleneck_train_features = mobileNet_model.predict_generator( train_generator, len(train_generator), verbose=1) bottleneck_validate_features = mobileNet_model.predict_generator( validate_generator, len(validate_generator), verbose=1) # Get training labels print(" Get Labels...") num_classes = len(train_generator.class_indices) train_classes = train_generator.classes train_labels = utils.to_categorical(train_classes, num_classes=num_classes) num_classes = len(validate_generator.class_indices) validate_classes = validate_generator.classes validate_labels = utils.to_categorical(validate_classes, num_classes=num_classes) print("Create top layer model...")