def define(self, optimizer=Adam(lr=config.configured_learning_rate)): """Define the model layers The defined model should be saved into base class """ self.optimizer = optimizer #define the base model based on keras vgg16 model keras_model = KerasVGG16( weights=config.configured_pretrained_weight, include_top=False, # if config.use_fineturn_model else True, input_tensor=self.get_input_tensor(), input_shape=self.get_input_shape(), classes=len(config.configured_classes)) self.set_trainable(keras_model, False) self.model_debug(keras_model) x = keras_model.output x = Flatten()(x) x = Dense(4096, activation='elu', name='fc1')(x) x = Dropout(0.6)(x) x = Dense(self.noveltyDetectionLayerSize, activation='elu', name=self.noveltyDetectionLayerName)(x) x = Dropout(0.6)(x) predictions = Dense(len(config.configured_classes), activation='softmax', name='predictions')(x) self.model = Model(input=keras_model.input, output=predictions) """
def _create(self): base_model = KerasVGG16(weights='imagenet', include_top=False, input_tensor=self.get_input_tensor()) self.make_net_layers_non_trainable(base_model) x = base_model.output x = Flatten()(x) x = Dense(4096, activation='elu', name='fc1')(x) x = Dropout(0.6)(x) x = Dense(self.noveltyDetectionLayerSize, activation='elu', name=self.noveltyDetectionLayerName)(x) x = Dropout(0.6)(x) predictions = Dense(len(config.classes), activation='softmax', name='predictions')(x) self.model = Model(input=base_model.input, output=predictions)
def _create(self): base_model = KerasVGG16(weights='imagenet', include_top=False, input_tensor=self.get_input_tensor()) #base_model = KerasVGG16(weights='imagenet', include_top=False, input_shape=(165, 100, 3)) self.make_net_layers_non_trainable(base_model) x = base_model.output print("the vgg16 layers is!!!!!!!!!!!!!!!!!!!!!!!") print(base_model.layers[3].output.shape) # print(base_model.layers[18].output.shape) # print(base_model.layers[19].output.shape) x = Flatten()(x) x = Dense(4096, activation='elu', name='fc1')(x) x = Dropout(0.6)(x) feature = Dense(self.noveltyDetectionLayerSize, activation='elu', name=self.noveltyDetectionLayerName)(x) x = Dropout(0.6)(feature) predictions = Dense(len(config.classes), activation='softmax', name='predictions')(x) # print("qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq") # print(len(config.classes)) # self.model = Model(input=base_model.input, output=predictions).save() if config.isCenterLoss: print(config.isCenterLoss) # input_2 chu input_target = Input(shape=(None, )) #print(input_target) centers = Embedding(len(config.classes), 4096)(input_target) print('center:', centers) #print(centers.ndim) # print(centers.shape) # print(centers[:, 0]) # print(centers[:, 1]) center_loss = Lambda( lambda x: K.sum(K.square(x[0] - x[1][:, 0]), 1, keepdims=True), name='center_loss')([feature, centers]) self.center_model = Model(inputs=[base_model.input, input_target], outputs=[predictions, center_loss]) elif config.isTripletLoss: self.triplet_model = Model(input=base_model.input, output=[predictions, feature]) else: print(base_model.input) # tensor("input_1:0") self.model = Model(input=base_model.input, output=predictions)
def _create(self): # base_model = KerasVGG16(weights='imagenet', include_top=False, input_tensor=self.get_input_tensor()) # self.make_net_layers_non_trainable(base_model) # # test1 = base_model.get_layer('block5_conv3').output # test1 = Lambda(lambda x: K.permute_dimensions(x, (0, 3, 1, 2)))(test1) #K.permute_dimensions(test1,(0, 3, 1, 2)) # shift to [Batch, Channel, Height, Width] ==> [B,512,28,28] # test1 = Lambda(lambda x: K.reshape(x, [-1, 512, 14*14]))(test1)#K.reshape(test1, [-1, 512, 28 * 28]) # #test1_T = Lambda(lambda x: K.permute_dimensions(test1,[0,2,1]))(test1) # # x_value = Lambda(lambda x: K.batch_dot(x, K.permute_dimensions(x,[0,2,1])))(test1) # x_value = Lambda(lambda x: K.reshape(x, [-1, 512*512]))(x_value) # K.reshape(x_value, [-1, 512 * 512]) # y_value = Lambda(lambda x: K.sqrt(x + 1e-10))(x_value) #K.sqrt(x_value + 1e-10) # z_value = Lambda(lambda x: K.l2_normalize(x, axis=1))(y_value)#K.l2_normalize(y_value, axis=1) # # # x = base_model.output # # z_value = Flatten()(z_value) # x = Dense(128, activation='elu', name='fc1')(z_value) # x = Dropout(0.6)(x) # x = Dense(self.noveltyDetectionLayerSize, activation='elu', name=self.noveltyDetectionLayerName)(x) # x = Dropout(0.6)(x) # predictions = Dense(len(config.classes), activation='softmax', name='predictions')(x) # self.model = Model(input=base_model.input, output=predictions) #self.model.load_weights() base_model = KerasVGG16(weights='imagenet', include_top=False, input_tensor=self.get_input_tensor()) self.make_net_layers_non_trainable(base_model) x = base_model.output print("the vgg16 layers is!!!!!!!!!!!!!!!!!!!!!!!") print(base_model.layers[3].output.shape) x = Flatten()(x) x = Dense(4096, activation='elu', name='fc1')(x) x = Dropout(0.6)(x) x = Dense(self.noveltyDetectionLayerSize, activation='elu', name=self.noveltyDetectionLayerName)(x) x = Dropout(0.6)(x) predictions = Dense(len(config.classes), activation='softmax', name='predictions')(x) self.model = Model(input=base_model.input, output=predictions) self.model = load_model( 'C:/Users/Ctbri/Desktop/chenxingli/keras-transfer-learning-for-oxford102/trained/model-vgg16.h5' )
def _create(self): base_model = KerasVGG16(weights='imagenet', include_top=False, input_tensor=self.get_input_tensor()) self.make_net_layers_non_trainable(base_model) x = base_model.output x = Dropout(self.dropout)(x) x = Flatten()(x) #x = Dense(4096, activation='elu', name='fc1')(x) #x = Dense(self.noveltyDetectionLayerSize, activation='elu', name=self.noveltyDetectionLayerName)(x) #x = Dropout(0.6)(x) if self.run_config.main.classification_type==_config.CLASSIFICATION_TYPE.CLASSIFICATION: predictions = Dense(self.run_config.data.nb_classes, activation='softmax', name='predictions')(x) elif self.run_config.main.classification_type==_config.CLASSIFICATION_TYPE.REGRESSION: predictions = Dense(1, activation='linear', name='regression')(x) elif self.run_config.main.classification_type==_config.CLASSIFICATION_TYPE.MULTIPLE_REGRESSION: predictions = Dense(self.run_config.data.nb_classes, activation='linear', name='multiple_regression')(x) else: raise ValueError("Error, unknown classification_type: <%s>" % self.run_config.main.classification_type) self.model = Model(input=base_model.input, output=predictions)