def _softdtw_func(Z, X, weights, barycenter, gamma): # Compute objective value and grad at Z. Z = Z.reshape(barycenter.shape) G = numpy.zeros_like(Z) obj = 0 for i in range(len(X)): D = SquaredEuclidean(Z, X[i]) sdtw = SoftDTW(D, gamma=gamma) value = sdtw.compute() E = sdtw.grad() G_tmp = D.jacobian_product(E) G += weights[i] * G_tmp obj += weights[i] * value return obj, G.ravel()
def _func(self, Z): # Compute objective value and grad at Z. Z = Z.reshape(self.barycenter_.shape) G = numpy.zeros_like(Z) obj = 0 for i in range(len(self._X_fit)): D = SquaredEuclidean(Z, self._X_fit[i]) sdtw = SoftDTW(D, gamma=self.gamma) value = sdtw.compute() E = sdtw.grad() G_tmp = D.jacobian_product(E) G += self.weights[i] * G_tmp obj += self.weights[i] * value return obj, G.ravel()