| import numpy as np
|
| from tensorflow.keras.layers import Lambda
|
| from tensorflow.keras.models import Model, Sequential
|
|
|
| from signature_verification.model import (
|
| contrastive_loss,
|
| create_base_network_signet,
|
| eucl_dist_output_shape,
|
| euclidean_distance,
|
| get_model,
|
| )
|
|
|
|
|
| def test_euclidean_distance():
|
| x = np.array([[1.0, 2.0], [3.0, 4.0]])
|
| y = np.array([[5.0, 6.0], [7.0, 8.0]])
|
| expected_output = np.array([[5.65685425], [5.65685425]])
|
|
|
| result = euclidean_distance([x, y])
|
|
|
| np.testing.assert_almost_equal(result, expected_output, decimal=6)
|
|
|
|
|
| def test_eucl_dist_output_shape():
|
| shape1 = (100, 100)
|
| shape2 = (100, 100)
|
| expected_output_shape = (100, 1)
|
|
|
| result = eucl_dist_output_shape([shape1, shape2])
|
| assert result == expected_output_shape
|
|
|
|
|
| def test_contrastive_loss():
|
| y_true = np.array([[1], [0]])
|
| y_pred = np.array([[0.5], [1.5]])
|
| expected_loss = (1 * 0.25 + (1 - 0) * 0) / 2
|
|
|
| result = contrastive_loss(y_true, y_pred)
|
|
|
| np.testing.assert_almost_equal(result, expected_loss, decimal=6)
|
|
|
|
|
| def test_create_base_network_signet():
|
| fake_input_shape = (100, 100, 1)
|
| base_network = create_base_network_signet(fake_input_shape)
|
|
|
|
|
| assert base_network.input_shape == (None, 100, 100, 1)
|
|
|
|
|
| assert isinstance(base_network, Sequential)
|
|
|
|
|
| assert base_network.layers.__len__() == 18
|
|
|
|
|
| output_shape = base_network.output_shape
|
| expected_output_shape = (None, 128)
|
| assert output_shape == expected_output_shape
|
|
|
|
|
| def test_get_model():
|
| model = get_model()
|
|
|
|
|
| assert isinstance(model, Model)
|
|
|
|
|
| assert model.input[0].shape == (None, 155, 220, 1)
|
| assert model.input[1].shape == (None, 155, 220, 1)
|
|
|
|
|
| assert len(model.layers) == 4
|
|
|
|
|
| assert isinstance(model.layers[-1], Lambda)
|
| assert model.layers[-1].function == euclidean_distance
|
|
|
|
|
|
|
| assert model.output.shape == (None, 1)
|
|
|