I want to use pre-trained vgg-19 after popping last layer then adding 2 FC(Dense) layer. I want to give input to one of these FC layer a binary variable(Male or female). How can I achieve it.
What you need a two-input and one-output network, where each input has its own feature extraction and both features fused before predicting the final output.
Below is an example.
import keras
from keras.applications.vgg19 import VGG19
from keras.layers import Input, Dense, Concatenate
from keras.models import Model
#-------------------------------------------------------------------------------
# Define your new inputs
# Here I pretend that your new task is a classification task over 100 classes
#-------------------------------------------------------------------------------
gender_input = Input(shape=(1,), name='gender_input')
image_input = Input(shape=(224,224,3), name='image_input')
num_classes = 100
#-------------------------------------------------------------------------------
# define your pretrained feature extraction
# you may do something different than below
# but the point here is to have a pretrained model for `featex`
# so you may define it differently
#-------------------------------------------------------------------------------
pretrained = VGG19()
featex = Model( pretrained.input, pretrained.layers[-2].output, name='vgg_pop_last' )
# consider to freeze all weights in featex to speed-up training
image_feat = featex( image_input )
#-------------------------------------------------------------------------------
# From here, you may play with different network architectures
# Below is just one example
#-------------------------------------------------------------------------------
image_feat = Dense(128, activation='relu', name='image_fc')( image_feat )
gender_feat = Dense(16, activation='relu', name='gender_fc')( gender_input )
# mix information from both information
# note: concatenation is only one of plausible way to mix information
concat_feat = Concatenate(axis=-1,name='concat_fc')([image_feat, gender_feat])
# perform final prediction
target = Dense(num_classes, activation='softmax', name='pred_class')( concat_feat )
#-------------------------------------------------------------------------------
# Here is your new model which contains two inputs and one new target
#-------------------------------------------------------------------------------
model = Model( inputs=[image_input, gender_input], outputs=target, name='myModel')
print model.summary()