diff options
Diffstat (limited to 'src/python/gudhi/tensorflow/rips_layer.py')
-rw-r--r-- | src/python/gudhi/tensorflow/rips_layer.py | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/python/gudhi/tensorflow/rips_layer.py b/src/python/gudhi/tensorflow/rips_layer.py index 97c2692d..e4d6d4c6 100644 --- a/src/python/gudhi/tensorflow/rips_layer.py +++ b/src/python/gudhi/tensorflow/rips_layer.py @@ -8,7 +8,7 @@ from ..rips_complex import RipsComplex # The parameters of the model are the point coordinates. -def _Rips(DX, max_edge, dimensions): +def _Rips(DX, max_edge, dimensions, homology_coeff_field=11): # Parameters: DX (distance matrix), # max_edge (maximum edge length for Rips filtration), # dimensions (homology dimensions) @@ -16,7 +16,7 @@ def _Rips(DX, max_edge, dimensions): # Compute the persistence pairs with Gudhi rc = RipsComplex(distance_matrix=DX, max_edge_length=max_edge) st = rc.create_simplex_tree(max_dimension=max(dimensions)+1) - st.compute_persistence() + st.compute_persistence(homology_coeff_field=homology_coeff_field) pairs = st.flag_persistence_generators() L_indices = [] @@ -40,7 +40,7 @@ class RipsLayer(tf.keras.layers.Layer): """ TensorFlow layer for computing Rips persistence out of a point cloud """ - def __init__(self, dimensions, maximum_edge_length=np.inf, min_persistence=None, **kwargs): + def __init__(self, dimensions, maximum_edge_length=np.inf, min_persistence=None, homology_coeff_field=11, **kwargs): """ Constructor for the RipsLayer class @@ -48,11 +48,13 @@ class RipsLayer(tf.keras.layers.Layer): maximum_edge_length (float): maximum edge length for the Rips complex dimensions (List[int]): homology dimensions min_persistence (List[float]): minimum distance-to-diagonal of the points in the output persistence diagrams (default None, in which case 0. is used for all dimensions) + homology_coeff_field (int): homology field coefficient. Must be a prime number. Default value is 11. Max is 46337. """ super().__init__(dynamic=True, **kwargs) self.max_edge = maximum_edge_length self.dimensions = dimensions self.min_persistence = min_persistence if min_persistence != None else [0. for _ in range(len(self.dimensions))] + self.hcf = homology_coeff_field assert len(self.min_persistence) == len(self.dimensions) def call(self, X): @@ -69,7 +71,7 @@ class RipsLayer(tf.keras.layers.Layer): DX = tf.norm(tf.expand_dims(X, 1)-tf.expand_dims(X, 0), axis=2) # Compute vertices associated to positive and negative simplices # Don't compute gradient for this operation - indices = _Rips(DX.numpy(), self.max_edge, self.dimensions) + indices = _Rips(DX.numpy(), self.max_edge, self.dimensions, self.hcf) # Get persistence diagrams by simply picking the corresponding entries in the distance matrix self.dgms = [] for idx_dim, dimension in enumerate(self.dimensions): |