I am using keras-mxnet 2.1.6.1.
I trained a model on cifar10 data using densenet121 (code below). There is no issue in training. However if I load weights to continue the training or call predict, it seems weight doesn't get loaded since training again starts from same loss/accuracy as the first time. Predict results are all nan.
from __future__ import print_function
import keras
from keras.applications.densenet import DenseNet121
from keras.layers.pooling import GlobalAveragePooling2D
from keras.layers.core import Dense
from keras.layers import Input
from keras.models import Model
from keras.regularizers import *
def get_model():
aliases = {}
Input_1 = Input(shape=(3, 221, 221), name='Input_1')
DenseNet121_1_model = DenseNet121(include_top= False, input_tensor = Input_1)
DenseNet121_1 = DenseNet121_1_model(Input_1)
aliases['DenseNet121_1'] = DenseNet121_1_model.name
num_layers = len(DenseNet121_1_model.layers)
for i, layer in enumerate(DenseNet121_1_model.layers):
if ((i * 100) / (num_layers - 1)) <= (100 - 10):
layer.trainable = False
GlobalAveragePooling2D_1 = GlobalAveragePooling2D(name='GlobalAveragePooling2D_1')(DenseNet121_1)
Dense_1 = Dense(name='Dense_1',units= 10,activation= 'softmax' )(GlobalAveragePooling2D_1)
model = Model([Input_1],[Dense_1])
return model
from keras.datasets import cifar10
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
import os
from skimage.transform import resize
import numpy as np
batch_size = 16
num_classes = 10
epochs = 2
# The data, split between train and test sets:
(x_train1, y_train1), (x_test1, y_test1) = cifar10.load_data()
y_train = y_train1[:x_train1.shape[0]//5]
y_test = y_test1[:x_test1.shape[0]//5]
x_train = np.ndarray((x_train1.shape[0]//5, 3,221,221), dtype=np.float32)
x_test = np.ndarray((x_test1.shape[0]//5, 3,221,221), dtype=np.float32)
for i in range(x_train.shape[0]):
x_train[i] = resize(x_train1[i], (3,221,221), anti_aliasing=True)
for i in range(x_test.shape[0]):
x_test[i] = resize(x_test1[i], (3,221,221), anti_aliasing=True)
# Convert class vectors to binary class matrices.
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# initiate RMSprop optimizer
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
model=get_model()
#model = keras.models.load_model("cifar.h5")
# Let's train the model using RMSprop
model.compile(loss='categorical_crossentropy',
optimizer=opt, context=["gpu(0)"],
metrics=['accuracy'])
x_train /= 255
x_test /= 255
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_data=(x_test, y_test),
shuffle=True)
model.save("cifar.h5")