def forward(self, x): #print('x in:' , x.shape) rad1 = 0.7272 radius = rad1 adjacency_method = 'cyflann' adjacency_kwds = {'radius': radius} affinity_method = 'gaussian' affinity_kwds = {'radius': radius} laplacian_method = 'symmetricnormalized' laplacian_kwds = {'scaling_epps': radius} geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds, affinity_method=affinity_method, affinity_kwds=affinity_kwds, laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds) x = x.view(100, -1) #print('before embedding:', x.shape) geom.set_data_matrix(x) spectral = SpectralEmbedding(n_components=10, eigen_solver='amg', geom=geom, drop_first=False) # use 3 for spectral embed_spectral = spectral.fit_transform(x) embed_spectral = torch.from_numpy(embed_spectral).float() #print('x_totorch:', embed_spectral.shape) x = embed_spectral.view(-1, 10) x = self.fc(x) return x
def forward(self, x): radius = 1.2 adjacency_method = 'cyflann' adjacency_kwds = {'radius': radius} affinity_method = 'gaussian' affinity_kwds = {'radius': radius} laplacian_method = 'symmetricnormalized' laplacian_kwds = {'scaling_epps': radius} geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds, affinity_method=affinity_method, affinity_kwds=affinity_kwds, laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds) x = x.view(100, -1) #print(x.shape) geom.set_data_matrix(x) lle = LocallyLinearEmbedding(n_components=10, eigen_solver='dense', geom=geom) embed_lle = lle.fit_transform(x) embed_lle = torch.from_numpy(embed_lle).float() x = embed_lle.view(-1, 10) x = self.fc(x) return x
def compute_geom_brute(self, diffusion_time, n_neighbors): data = self.data dim = self.dim #set radius according to paper (i think this is dim not d) radius = (diffusion_time * (diffusion_time * np.pi * 4)**(dim/2))**(0.5) #set adjacency radius large enough that points beyond it have affinity close to zero bigradius = 3 * radius adjacency_method = 'brute' adjacency_kwds = {'radius':bigradius} affinity_method = 'gaussian' affinity_kwds = {'radius':radius} laplacian_method = 'geometric' laplacian_kwds = {'scaling_epps':1} geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds, affinity_method=affinity_method, affinity_kwds=affinity_kwds, laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds) geom.set_data_matrix(data) geom.adjacency_matrix = geom.compute_adjacency_matrix() geom.laplacian_matrix = geom.compute_affinity_matrix() geom.laplacian_matrix = self.get_laplacian(geom, radius) return(geom)
def compute_geom(self, diffusion_time, n_neighbors): data = self.data dim = self.dim #set radius according to paper (i think this is dim not d) radius = (diffusion_time * (diffusion_time * np.pi * 4)**(dim/2))**(0.5) #set adjacency radius large enough that points beyond it have affinity close to zero bigradius = 3 * radius adjacency_method = 'cyflann' cyflann_kwds = {'index_type':'kdtrees', 'num_trees':10, 'num_checks':n_neighbors} adjacency_kwds = {'radius':bigradius, 'cyflann_kwds':cyflann_kwds} affinity_method = 'gaussian' affinity_kwds = {'radius':radius} laplacian_method = 'geometric' laplacian_kwds = {'scaling_epps':radius} geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds, affinity_method=affinity_method, affinity_kwds=affinity_kwds, laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds) geom.set_data_matrix(data) adjacency_matrix = geom.compute_adjacency_matrix() laplacian_matrix = geom.compute_laplacian_matrix() return(geom)
# Affinity an NxN (sparse) pairwise matrix insicated similarity between points # Laplacian an NxN (sparse) pairwsie matrix containing geometric manifold information radius = 5 adjacency_method = 'cyflann' adjacency_kwds = {'radius': radius} # ignore distances above this radius affinity_method = 'gaussian' affinity_kwds = {'radius': radius} # A = exp(-||x - y||/radius^2) laplacian_method = 'geometric' laplacian_kwds = { 'scaling_epps': radius } # scaling ensures convergence to Laplace-Beltrami operator geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds, affinity_method=affinity_method, affinity_kwds=affinity_kwds, laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds) # You can/should also use the set_data_matrix, set_adjacency_matrix, set_affinity_matrix # to send your data set (in whichever form it takes) this way. geom.set_data_matrix(X) # You can get the distance, affinity etc with e.g: Geometry.get_distance_matrix() # you can update the keyword arguments passed inially using these functions adjacency_matrix = geom.compute_adjacency_matrix() # by defualt this is pass-by-reference. Use copy=True to get a copied version. # If you don't want to pre-compute a Geometry you can pass a dictionary or geometry # arguments to one of the embedding classes. geom = {