model.compile(optimizer, loss=earth_mover_loss) # load weights from trained model if it exists if os.path.exists('weights/nasnet_large_weights.h5'): model.load_weights('weights/nasnet_large_weights.h5') # load pre-trained NIMA(NASNet Mobile) classifier weights if os.path.exists('weights/nasnet_large_pretrained_weights.h5'): model.load_weights('weights/nasnet_large_pretrained_weights.h5', by_name=True) checkpoint = ModelCheckpoint('weights/nasnet_large_weights.h5', monitor='val_loss', verbose=1, save_weights_only=True, save_best_only=True, mode='min') tensorboard = TensorBoardBatch(log_dir='./nasnet_logs/') callbacks = [checkpoint, tensorboard] batchsize = 200 epochs = 20 model.fit_generator(train_generator(batchsize=batchsize), steps_per_epoch=(250000. // batchsize), epochs=epochs, verbose=1, callbacks=callbacks, validation_data=val_generator(batchsize=batchsize), validation_steps=(5000. // batchsize))
def _float32_feature_list(floats): return tf.train.Feature(float_list=tf.train.FloatList(value=floats)) model = NASNetLarge((image_size, image_size, 3), include_top=False, pooling='avg') model.summary() # ''' TRAIN SET ''' nb_samples = 250000 * 2 batchsize = 200 with sess.as_default(): generator = train_generator(batchsize, shuffle=False) writer = tf.python_io.TFRecordWriter('weights/nasnet_large_train.tfrecord') count = 0 for _ in range(nb_samples // batchsize): x_batch, y_batch = next(generator) with sess.as_default(): x_batch = model.predict(x_batch, batchsize, verbose=1) for i, (x, y) in enumerate(zip(x_batch, y_batch)): examples = { 'features': _float32_feature_list(x.flatten()), 'scores': _float32_feature_list(y.flatten()), } features = tf.train.Features(feature=examples)