/
TolmachevM
/
MLLowLevelResearch
Обзор
Документация
Войти
/
TolmachevM
/
MLLowLevelResearch
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
3
Аналитика
Безопасность
master
mutuoencoder.py
58 строк
2 KB
TolmachevM
update mutuoencoder.py
12 июл 2025, 06:32
12 июл 2025, 06:32
4aee2e3
Код
Авторство
О чём код?
import numpy as np import torch from itertools import permutations # Entropy_driven_learning4_Spirals_Mutuoencoders.ipynb # На входе n точек, на выходе - n*(n-1) пар точек # Использование: # pairs = create_pairs(points) def create_pairs(points): # Создаем массив для хранения пар n = len(points) pairs = np.empty((n * (n - 1), 2, 2)) # Заполняем массив парами точек for index, (i, j) in enumerate(permutations(range(n), 2)): pairs[index, 0] = points[i] pairs[index, 1] = points[j] return torch.Tensor(pairs) # Использование: # points = shuffle_points(points) def shuffle_points(points): return points[torch.randperm(points.size()[0])] # Использование: # s = similarity(points1, points2, alpha=10) def similarity(p1, p2, alpha=10): n = len(p1) ###pairs = torch.Tensor([]) ###for index, (i, j) in enumerate(permutations(range(n), 2)): ###pairs = torch.cat((pairs, torch.cat((p1[i].unsqueeze(1), p2[j].unsqueeze(1)), 1).unsqueeze(0)), 0) ###dist = torch.linalg.vector_norm(pairs[:, :, 0] - pairs[:, :, 1], dim=1) #print(pairs.shape) dist = torch.empty((n, n)) for i in range(n): for j in range(n): if i == j: dist[i, j] = torch.inf else: dist[i, j] = torch.linalg.vector_norm(p1[i] - p2[j]) #print(dist) return torch.exp(-alpha * dist) # Использование # loss1 = RangeUncoveryLoss(pred, real_points, reduction='max', gamma=10, alpha=10) #reduction='mean' def RangeUncoveryLoss(points1, points2, reduction='max', alpha=10, gamma=10): s = similarity(points1, points2, alpha=alpha) if reduction == 'max': return 1 - (torch.sigmoid(gamma * s.max(dim=1).values)).mean() elif reduction == 'mean': return 1 - (torch.sigmoid(gamma * s.mean(dim=1))).mean() else: assert("No such type of reduction is supported.")