Search code examples
pythonkerasdeep-learningconv-neural-networksequential

How to load imagenet weights before Training in Keras for AlexNet?


Hi I wrote AlexNet in keras using the sequential method. I wanted to know if and how I can load imagenet weights for training the model?

At the moment I am using randomNormal kernel initialization for each layer. But I want to use the imagenet weights for training. I have the weights as a H5 file. Could someone please give an example code as well?


Solution

  • model = Sequential()
    
    # 1st Convolutional Layer
    model.add(Conv2D(filters=96, input_shape=(224,224,3), kernel_size=(11,11), strides=(4,4), padding=’valid’))
    model.add(Activation(‘relu’))
    # Max Pooling
    model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding=’valid’))
    
    # 2nd Convolutional Layer
    model.add(Conv2D(filters=256, kernel_size=(11,11), strides=(1,1), padding=’valid’))
    model.add(Activation(‘relu’))
    # Max Pooling
    model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding=’valid’))
    
    # 3rd Convolutional Layer
    model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding=’valid’))
    model.add(Activation(‘relu’))
    
    # 4th Convolutional Layer
    model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding=’valid’))
    model.add(Activation(‘relu’))
    
    # 5th Convolutional Layer
    model.add(Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), padding=’valid’))
    model.add(Activation(‘relu’))
    # Max Pooling
    model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding=’valid’))
    
    # Passing it to a Fully Connected layer
    model.add(Flatten())
    # 1st Fully Connected Layer
    model.add(Dense(4096, input_shape=(224*224*3,)))
    model.add(Activation(‘relu’))
    # Add Dropout to prevent overfitting
    model.add(Dropout(0.4))
    
    # 2nd Fully Connected Layer
    model.add(Dense(4096))
    model.add(Activation(‘relu’))
    # Add Dropout
    model.add(Dropout(0.4))
    
    # 3rd Fully Connected Layer
    model.add(Dense(1000))
    model.add(Activation(‘relu’))
    # Add Dropout
    model.add(Dropout(0.4))
    
    # Output Layer
    model.add(Dense(17))
    model.add(Activation(‘softmax’))
    
    model.summary()
    
    # Compile the model
    model.compile(loss=keras.losses.categorical_crossentropy, optimizer=’adam’, metrics=[“accuracy”])
    
    model.load_weights('weight.h5')