def test_should_produce_augmented_samples_given_batch_size(self): images = np.random.rand(20, 64, 64, 1) labels = np.random.rand(20) generator = DataGenerator().fit(images, labels) batch_size = 10 batch, _ = generator.get_next_batch(batch_size) self.assertEqual(batch.shape[0], batch_size) self.assertEqual(images.shape[1:], batch.shape[1:])
def test_should_raise_error_if_model_not_fit_to_data_yet(self): with self.assertRaises(ValueError) as a: DataGenerator(time_delay=5).get_next_batch() with self.assertRaises(ValueError) as b: DataGenerator(time_delay=5).generate() self.assertEqual("Model is not fit to any data set yet", str(a.exception)) self.assertEqual("Model is not fit to any data set yet", str(b.exception))
def test_should_raise_error_if_time_delay_is_not_matching_input_time_axis( self): images = np.random.rand(10, 4, 64, 64, 3) labels = np.random.rand(10) with self.assertRaises(ValueError) as e: DataGenerator(time_delay=5).fit(images, labels) self.assertEqual( "Images have time axis length 4 but time_delay parameter was set to 5", str(e.exception))
def test_should_raise_error_when_time_delay_was_not_set_and_input_is_time_series( self): images = np.random.rand(10, 2, 64, 64, 3) labels = np.random.rand(10) with self.assertRaises(ValueError) as e: DataGenerator().fit(images, labels) self.assertEqual( "Images have time axis length 2 but time_delay parameter was set to None", str(e.exception))
def test_should_raise_error_when_time_delay_parameter_is_set_and_input_is_simple_images( self): images = np.random.rand(10, 64, 64, 3) labels = np.random.rand(10) with self.assertRaises(ValueError) as e: DataGenerator(time_delay=4).fit(images, labels) self.assertEqual( "Time_delay parameter was set but Images say otherwise", str(e.exception))
target_dimensions = (128, 128) target_dimensions2 = (490, 640) #directory_path = r'C:\Users\localadmin\Desktop\final_proj\cohn-kanade-images2' directory_path = r'D:\Degree\Final project\cohn-kanade-formated2' data_loader = DirectoryDataLoader(datapath=directory_path, validation_split=validation_split, target_dimension=target_dimensions2, out_channels=3) dataset = data_loader.load_data() if verbose: dataset.print_data_details() print('Creating training/testing data...') train_images, train_labels = dataset.get_training_data() train_gen = DataGenerator().fit(train_images, train_labels) test_images, test_labels = dataset.get_test_data() test_gen = DataGenerator().fit(test_images, test_labels) print('Initializing neural network with InceptionV3 base model...') model = TransferLearningNN(model_name=model_name, emotion_map=dataset.get_emotion_index_map()) print('Training model...') model.fit_generator(train_gen.generate(target_dimensions, 10), test_gen.generate(target_dimensions, 10), epochs=10)
print('--------------- Convolutional Model -------------------') print('Loading data...') # directory_path = resource_filename('EmoPy.examples','image_data/sample_image_directory') directory_path = r'D:\Degree\Final project\cohn-kanade-formated2' data_loader = DirectoryDataLoader(datapath=directory_path, validation_split=validation_split, target_dimension=target_dimensions2) dataset = data_loader.load_data() if verbose: dataset.print_data_details() print('Preparing training/testing data...') train_images, train_labels = dataset.get_training_data() train_gen = DataGenerator().fit(train_images, train_labels) test_images, test_labels = dataset.get_test_data() test_gen = DataGenerator().fit(test_images, test_labels) print('Training net...') model = ConvolutionalNN(target_dimensions, channels, dataset.get_emotion_index_map(), verbose=True) model.fit_generator(train_gen.generate(target_dimensions, batch_size=5), test_gen.generate(target_dimensions, batch_size=5), epochs=5) # Save model configuration # model.export_model('output/conv2d_model.json','output/conv2d_weights.h5',"output/conv2d_emotion_map.json", emotion_map)
verbose = True print('--------------- Convolutional LSTM Model -------------------') print('Loading data...') directory_path = "image_data/sample_image_series_directory" data_loader = DirectoryDataLoader(datapath=directory_path, validation_split=validation_split, time_delay=2) dataset = data_loader.load_data() if verbose: dataset.print_data_details() print('Preparing training/testing data...') train_images, train_labels = dataset.get_training_data() train_gen = DataGenerator(time_delay=dataset.get_time_delay()).fit( train_images, train_labels) test_images, test_labels = dataset.get_test_data() test_gen = DataGenerator(time_delay=dataset.get_time_delay()).fit( test_images, test_labels) print('Training net...') model = ConvolutionalLstmNN(target_dimensions, channels, dataset.get_emotion_index_map(), time_delay=dataset.get_time_delay()) model.fit_generator(train_gen.generate(target_dimensions, batch_size=5), test_gen.generate(target_dimensions, batch_size=5), epochs=5) ## if you want to save a graph of your model layers. model.save_model_graph()
def test_should_raise_error_when_channel_axis_is_not_present(self): images = np.random.rand(20, 64, 64) labels = np.random.rand(20) with self.assertRaises(ValueError) as e: DataGenerator().fit(images, labels) self.assertEqual("Channel Axis should have value", str(e.exception))
def test_should_raise_error_when_labels_and_samples_are_mis_matched(self): images = np.random.rand(20, 64, 64) with self.assertRaises(ValueError) as e: DataGenerator().fit(images, [1]) self.assertEqual("Samples are not labeled properly", str(e.exception))
def test_should_resize_images_to_given_target_dimension(self): images = np.random.rand(20, 64, 64, 3) labels = np.random.rand(20) generator = DataGenerator().fit(images, labels) batch, _ = generator.get_next_batch(10, target_dimensions=(28, 28)) self.assertEqual(batch.shape, (10, 28, 28, 3))