def test_fit_named_directory(data_dir, mocker): numpy.random.seed(53) x = numpy.random.randint(256, size=(100, 48, 48, 3)) y = numpy.random.randint(4, size=(100, )) with mocker.patch("keras_resnet.models.ResNet50") as model_mock: keras_resnet.models.ResNet50.return_value = model_mock model_directory = str(data_dir.mkdir("models")) model = deepometry.model.Model(shape=(48, 48, 3), units=4, directory=model_directory) model.compile() model.fit(x, y, batch_size=10, epochs=1, validation_split=0.1, verbose=0) _, kwargs = model_mock.fit_generator.call_args # callbacks callbacks = kwargs["callbacks"] assert callbacks[0].filename == os.path.join(model_directory, "training.csv") assert callbacks[2].filepath == os.path.join(model_directory, "checkpoint.hdf5") assert os.path.exists(os.path.join(model_directory, "means.csv"))
def command(input, batch_size, directory, epochs, name, validation_split, verbose): import deepometry.model directories = [os.path.realpath(directory) for directory in input] pathnames = _sample(directories) labels = set([ os.path.split(os.path.dirname(pathname))[-1] for pathname in pathnames ]) x, y = _load(pathnames, labels) model = deepometry.model.Model(directory=directory, name=name, shape=x.shape[1:], units=len(labels)) model.compile() model.fit(x, y, batch_size=batch_size, epochs=epochs, validation_split=validation_split, verbose=1 if verbose else 0)
def _fit(x, y, units, batch_size, directory, epochs, name, validation_split, verbose): import deepometry.model model = deepometry.model.Model(directory=directory, name=name, shape=x.shape[1:], units=units) model.compile() model.fit(x, y, batch_size=batch_size, epochs=epochs, validation_split=validation_split, verbose=1 if verbose else 0)
def test_fit_named_model(data_dir, mocker): numpy.random.seed(53) x = numpy.random.randint(256, size=(100, 48, 48, 3)) y = numpy.random.randint(4, size=(100, )) with mocker.patch("keras_resnet.models.ResNet50") as model_mock: keras_resnet.models.ResNet50.return_value = model_mock resources = mocker.patch("pkg_resources.resource_filename") resources.side_effect = lambda _, filename: str( data_dir.join(os.path.basename(filename))) model = deepometry.model.Model(shape=(48, 48, 3), units=4, name="zoolander") model.compile() model.fit(x, y, batch_size=10, epochs=1, validation_split=0.1, verbose=0) _, kwargs = model_mock.fit_generator.call_args # callbacks callbacks = kwargs["callbacks"] assert callbacks[0].filename == pkg_resources.resource_filename( "deepometry", os.path.join("data", "zoolander_training.csv")) assert callbacks[2].filepath == pkg_resources.resource_filename( "deepometry", os.path.join("data", "zoolander_checkpoint.hdf5")) assert os.path.exists( pkg_resources.resource_filename( "deepometry", os.path.join("data", "zoolander_means.csv")))
def test_fit_defaults(data_dir, mocker): numpy.random.seed(53) x = numpy.random.randint(256, size=(100, 48, 48, 3)) y = numpy.random.randint(4, size=(100, )) with mocker.patch("keras_resnet.models.ResNet50") as model_mock: keras_resnet.models.ResNet50.return_value = model_mock resources = mocker.patch("pkg_resources.resource_filename") resources.side_effect = lambda _, filename: str( data_dir.join(os.path.basename(filename))) model = deepometry.model.Model(shape=(48, 48, 3), units=4) model.compile() model.fit(x, y, batch_size=10, epochs=1, validation_split=0.1, verbose=0) model_mock.fit_generator.assert_called_once_with( callbacks=mocker.ANY, class_weight=mocker.ANY, epochs=1, generator=mocker.ANY, steps_per_epoch=9, validation_data=mocker.ANY, validation_steps=1, verbose=0) _, kwargs = model_mock.fit_generator.call_args # callbacks callbacks = kwargs["callbacks"] assert len(callbacks) == 4 assert isinstance(callbacks[0], keras.callbacks.CSVLogger) assert callbacks[0].filename == pkg_resources.resource_filename( "deepometry", os.path.join("data", "training.csv")) assert isinstance(callbacks[1], keras.callbacks.EarlyStopping) assert isinstance(callbacks[2], keras.callbacks.ModelCheckpoint) assert callbacks[2].filepath == pkg_resources.resource_filename( "deepometry", os.path.join("data", "checkpoint.hdf5")) assert isinstance(callbacks[3], keras.callbacks.ReduceLROnPlateau) # generator generator = kwargs["generator"] assert isinstance(generator, deepometry.image.iterator.NumpyArrayIterator) assert generator.batch_size == 10 assert generator.x.shape == (90, 48, 48, 3) assert generator.image_data_generator.height_shift_range == 0.5 assert generator.image_data_generator.horizontal_flip == True assert generator.image_data_generator.rotation_range == 180 assert generator.image_data_generator.vertical_flip == True assert generator.image_data_generator.width_shift_range == 0.5 x_train = generator.x sample = x_train[0] expected = numpy.empty((48, 48, 3)) expected[:, :, 0] = (sample[:, :, 0] - numpy.mean(x_train[:, :, :, 0]) + 255.0) / (2.0 * 255.0) expected[:, :, 1] = (sample[:, :, 1] - numpy.mean(x_train[:, :, :, 1]) + 255.0) / (2.0 * 255.0) expected[:, :, 2] = (sample[:, :, 2] - numpy.mean(x_train[:, :, :, 2]) + 255.0) / (2.0 * 255.0) actual = generator.image_data_generator.preprocessing_function(sample) numpy.testing.assert_array_almost_equal(actual, expected, decimal=5) # validation_data validation_data = kwargs["validation_data"] assert isinstance(validation_data, deepometry.image.iterator.NumpyArrayIterator) assert validation_data.batch_size == 10 assert validation_data.x.shape == (10, 48, 48, 3) assert validation_data.image_data_generator.height_shift_range == 0.5 assert validation_data.image_data_generator.horizontal_flip == True assert validation_data.image_data_generator.rotation_range == 180 assert validation_data.image_data_generator.vertical_flip == True assert validation_data.image_data_generator.width_shift_range == 0.5 x_valid = validation_data.x sample = x_valid[0] expected = numpy.empty((48, 48, 3)) expected[:, :, 0] = (sample[:, :, 0] - numpy.mean(x_train[:, :, :, 0]) + 255.0) / (2.0 * 255.0) expected[:, :, 1] = (sample[:, :, 1] - numpy.mean(x_train[:, :, :, 1]) + 255.0) / (2.0 * 255.0) expected[:, :, 2] = (sample[:, :, 2] - numpy.mean(x_train[:, :, :, 2]) + 255.0) / (2.0 * 255.0) actual = generator.image_data_generator.preprocessing_function(sample) numpy.testing.assert_array_almost_equal(actual, expected, decimal=5)
x = xx[:, :, :, drop:] del (xx) print('Shape of x to be trained on: ', x.shape) # apply session configuration.gpu_options.allow_growth = True session = tensorflow.Session(config=configuration) keras.backend.set_session(session) model = deepometry.model.Model(shape=x.shape[1:], units=units) model.compile() model.fit(x, y, batch_size=32, class_weight="auto", epochs=512, validation_split=0.3, verbose=1) if not os.path.exists(model_directory): os.makedirs(model_directory) model.model.save( os.path.join(model_directory, 'resnet50_drop' + str(drop) + '.h5')) del (x) keras.backend.clear_session()