# training time history = attr.model.fit_generator( attr.train_generator, steps_per_epoch=attr.steps_train, epochs=attr.epochs, validation_data=attr.validation_generator, validation_steps=attr.steps_valid, use_multiprocessing=True, workers=multiprocessing.cpu_count() - 1, callbacks=callbacks) # plot loss and accuracy plot_train_stats(history, attr.curr_basename + '-training_loss.png', attr.curr_basename + '-training_accuracy.png') # make sure that the best weights are loaded (even if restore_best_weights is already true) attr.model.load_weights(filepath=attr.curr_basename + "-ckweights.h5") # save model with weights for later reuse save_model(attr) # delete ckweights to save space - model file already has the best weights os.remove(attr.curr_basename + "-ckweights.h5") # create confusion matrix and report with accuracy, precision, recall, f-score write_summary_txt(attr, NETWORK_FORMAT, IMAGE_FORMAT, ['negative', 'positive'], time_callback, callbacks[1].stopped_epoch) K.clear_session() copy_to_s3(attr) # os.system("sudo poweroff")
attr.model.save(attr.summ_basename + '-weights.h5') # Plot train stats plot_train_stats(history, attr.summ_basename + '-training_loss.png', attr.summ_basename + '-training_accuracy.png') # Get the filenames from the generator fnames = attr.test_generator.filenames # Get the ground truth from generator ground_truth = attr.test_generator.classes # Get the label to class mapping from the generator label2index = attr.test_generator.class_indices # Getting the mapping from class index to class label idx2label = dict((v,k) for k,v in label2index.items()) # Get the predictions from the model using the generator predictions = attr.model.predict_generator(attr.test_generator, steps=attr.steps_test, verbose=1) predicted_classes = np.argmax(predictions, axis=1) errors = np.where(predicted_classes != ground_truth)[0] res="No of errors = {}/{}".format(len(errors), attr.test_generator.samples) with open(attr.summ_basename + "-predicts.txt", "a") as f: f.write(res) print(res) f.close() write_summary_txt(attr, "Unimodal", "2D", ['negative', 'positive']) copy_to_s3(attr)