Я хочу сделать прогноз траектории на карте. Траектории сформированы (long, lat). Поэтому я определил функцию потерь самостоятельно. Код выглядит следующим образом (с использованием RNN в Pytorch):
def hav(self, theta):
s = torch.sin(theta / 2)
return s * s
def get_distance_hav(self, lng0, lat0, lng1, lat1):
EARTH_RADIUS = 6371.
lat0 = lat0 * np.pi / 180
lat1 = lat1 * np.pi / 180
lng0 = lng0 * np.pi / 180
lng1 = lng1 * np.pi / 180
dlng = torch.abs(lng0 - lng1)
dlat = torch.abs(lat0 - lat1)
h = self.hav(dlat) + torch.cos(lat0) * torch.cos(lat1) * self.hav(dlng)
return h
def GCDLoss(self, x, y):
x = 100 * x; y = 100 * y
DisTotal = torch.tensor(0., requires_grad=True)
dis = self.get_distance_hav(x[:, :, 0], x[:, :, 1], y[:, :, 0], y[:, :, 1]).sum()
DisTotal = DisTotal + dis
return DisTotal
Я использую оптимизатор Adam, но потери легко go NAN. И я всегда становлюсь все больше и больше с эпохами. Как решить эту проблему? Thx!