1

I have a model that I've trained for 75 epochs. I saved the model with model.save(). The code for training is

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential, load_model
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras import backend as K

# dimensions of our images.
img_width, img_height = 320, 240

train_data_dir = 'dataset/Training_set'
validation_data_dir = 'dataset/Test_set'
nb_train_samples = 4000  #total
nb_validation_samples = 1000  # total
epochs = 25
batch_size = 10

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=5)

model.save('model1.h5')

How do I restart training? Do I just run this code again? Or do I need to make changes and what are those changes?

I read that post and tried to understand some. I read this here: Loading a trained Keras model and continue training

benjaminplanche
  • 14,689
  • 5
  • 57
  • 69
James
  • 1,124
  • 3
  • 17
  • 37
  • 1
    iirc you should be able to just load the model, then do another model.fit() Have you tried this? – VegardKT Aug 07 '18 at 08:03
  • LIKE THIS: model.save('model1.h5') new_model = load_model("model1.h5") new_model.fit_generator( train_generator, steps_per_epoch=nb_train_samples // batch_size, epochs=25, validation_data=validation_generator, validation_steps=5) JUST ADD THIS INTO CODE AND RUN AGAIN??? – James Aug 07 '18 at 08:09

1 Answers1

1

You can simply load your model with

from keras.models import load_model
model = load_model('model1.h5')
ixeption
  • 1,972
  • 1
  • 13
  • 19
  • yes , i am doing that. after loading model, i created new variable new _model and did new_model = load_model("model1.h5") new_model.fit_generator( train_generator, steps_per_epoch=nb_train_samples // batch_size, epochs=25, validation_data=validation_generator, validation_steps=5) now just run the code right? – James Aug 07 '18 at 08:13
  • Yes. To be safe, delete your model after saving it (and before loading it again ofc) Make sure you do NOT compile your loaded model as this will reset its weights. – VegardKT Aug 07 '18 at 08:17
  • I am receiving NameError: name 'load_model' is not defined – James Aug 07 '18 at 08:19
  • Alright it started....the training...now i understood, It is a great learning here – James Aug 07 '18 at 08:25
  • why to delete the model? – James Aug 07 '18 at 08:26
  • Just when you are testing, to make sure that you have loaded it correctly. – VegardKT Aug 07 '18 at 08:28
  • Do i again need to save the model, like i have loaded model usng new_model = model.load("modelname") do i need to save the new model again? – James Aug 07 '18 at 10:11
  • if you want to load it later, yes – ixeption Aug 07 '18 at 11:55