def test_three_classes(): y = np.array(['a', 'a', 'c', 'b']) head = head_module.ClassificationHead(name='a') adapter = head.get_adapter() adapter.fit_transform(y) head.config_from_adapter(adapter) assert head.loss.name == 'categorical_crossentropy'
def test_clf_head_with_2_clases_get_label_encoder(): head = head_module.ClassificationHead(name="a", num_classes=2) head._encoded = False head._labels = ["a", "b"] assert isinstance( head.get_hyper_preprocessors()[-1].preprocessor, preprocessors.LabelEncoder )
def test_clf_head_get_multi_label_preprocessor(): head = head_module.ClassificationHead(name="a", multi_label=True) head._encoded = True assert isinstance( head.get_hyper_preprocessors()[0].preprocessor, preprocessors.MultiLabelEncoder, )
def test_three_classes(): y = np.array(["a", "a", "c", "b"]) head = head_module.ClassificationHead(name="a") adapter = head.get_adapter() adapter.fit_transform(y) head.config_from_adapter(adapter) assert head.loss.name == "categorical_crossentropy"
def test_clf_head_get_sigmoid_postprocessor(): head = head_module.ClassificationHead(name="a", multi_label=True) head._encoded = True head._encoded_for_sigmoid = True assert isinstance( head.get_hyper_preprocessors()[0].preprocessor, preprocessors.SigmoidPostprocessor, )
def test_multi_label_loss(): head = head_module.ClassificationHead(name='a', multi_label=True, num_classes=8) head.output_shape = (8,) input_node = tf.keras.Input(shape=(5,)) output_node = head.build(kerastuner.HyperParameters(), input_node) model = tf.keras.Model(input_node, output_node) assert model.layers[-1].activation.__name__ == 'sigmoid' assert head.loss.name == 'binary_crossentropy'
def test_clf_head_build_with_zero_dropout_return_tensor(): block = head_module.ClassificationHead(dropout=0, shape=(8,)) outputs = block.build( keras_tuner.HyperParameters(), tf.keras.Input(shape=(5,), dtype=tf.float32), ) assert len(nest.flatten(outputs)) == 1
def test_two_classes(): y = np.array(['a', 'a', 'a', 'b']) head = head_module.ClassificationHead(name='a') adapter = head.get_adapter() adapter.fit_transform(y) head.config_from_adapter(adapter) head.output_shape = (1,) head.build(kerastuner.HyperParameters(), input_module.Input(shape=(32,)).build()) assert head.loss.name == 'binary_crossentropy'
def test_three_classes_infer_categorical_crossentropy(): dataset = np.array(["a", "a", "c", "b"]) head = head_module.ClassificationHead(name="a", shape=(1,)) adapter = head.get_adapter() dataset = adapter.adapt(dataset, batch_size=32) analyser = head.get_analyser() for data in dataset: analyser.update(data) analyser.finalize() head.config_from_analyser(analyser) head.build( keras_tuner.HyperParameters(), input_module.Input(shape=(32,)).build_node(keras_tuner.HyperParameters()), ) assert head.loss.name == "categorical_crossentropy"
def test_clf_head_hpps_with_uint8_contain_cast_to_int32(): dataset = utils.generate_one_hot_labels(100, 10, "dataset") dataset = dataset.map(lambda x: tf.cast(x, tf.uint8)) head = head_module.ClassificationHead(shape=(8, )) analyser = head.get_analyser() for data in dataset: analyser.update(data) analyser.finalize() head.config_from_analyser(analyser) assert any([ isinstance(hpp, hyper_preprocessors.DefaultHyperPreprocessor) and isinstance(hpp.preprocessor, preprocessors.CastToInt32) for hpp in head.get_hyper_preprocessors() ])