Example #1
0
 def kernel(self, points1, points2=None):
     if points2 is None:
         points2 = points1
         white_noise = self.white * util.eye(tf.shape(points1)[0])
     else:
         white_noise = 0.0
     kern = tf.matmul(points1 * self.variance, tf.transpose(points2))
     return kern + white_noise
Example #2
0
    def kernel(self, points1, points2=None):
        if points2 is None:
            points2 = points1
            white_noise = self.white * util.eye(tf.shape(points1)[0])
        else:
            white_noise = 0.0
        # Introduce dummy dimension so we can use broadcasting
        f = tf.expand_dims(points1, 1)  # now N x 1 x D
        f2 = tf.expand_dims(points2, 0)  # now 1 x M x D

        r = np.float32(np.pi) * (f - f2) / self.period
        r = tf.reduce_sum(tf.square(tf.sin(r) / self.lengthscale), 2)

        return self.variance * tf.exp(-2 * r) + white_noise
Example #3
0
    def kernel(self, points1, points2=None): 
        if points2 is None:
            points2 = points1
            white_noise = self.white * util.eye(tf.shape(points1)[0]) 
        else: 
            white_noise = 0.0       

        points1 = points1 / self.lengthscale
        points2 = points2 / self.lengthscale
        magnitude_square1 = tf.expand_dims(tf.reduce_sum(points1 ** 2, 1), 1)
        magnitude_square2 = tf.expand_dims(tf.reduce_sum(points2 ** 2, 1), 1)
        distances = (magnitude_square1 - 2 * tf.matmul(points1, tf.transpose(points2)) +
                     tf.transpose(magnitude_square2))

        distances = tf.clip_by_value(distances, 0.0, self.MAX_DIST);
        kern = ((self.std_dev ** 2) * tf.exp(-distances / 2.0))
        return kern + white_noise
Example #4
0
    def kernel(self, points1, points2=None):
        if points2 is None:
            points2 = points1
            white_noise = self.white * util.eye(tf.shape(points1)[0])
        else:
            white_noise = 0.0

        # Compute the euclidian distances
        magnitude_square1 = tf.expand_dims(tf.reduce_sum(points1**2, 1), 1)
        magnitude_square2 = tf.expand_dims(tf.reduce_sum(points2**2, 1), 1)
        distances_root = tf.sqrt(
            (magnitude_square1 -
             2.0 * tf.matmul(points1, tf.transpose(points2)) +
             tf.transpose(magnitude_square2)))
        distances_root = tf.clip_by_value(distances_root, 0.0, self.MAX_DIST)

        kern = ((self.std_dev**2) * tf.exp(-distances_root / self.lengthscale))

        return kern + white_noise
Example #5
0
    def kernel_split(self, points1, points2=None):
        if points2 is None:
            points2 = points1
            white_noise = self.white * util.eye(tf.shape(points1)[0])
        else:
            white_noise = 0.0

        X = points1 / self.lengthscale
        Xs = tf.reduce_sum(tf.square(X), axis=1)

        X2 = points2 / self.lengthscale
        X2s = tf.reduce_sum(tf.square(X2), axis=1)
        r2 = -2.0 * tf.matmul(X, X2, transpose_b=True)
        r2 += tf.reshape(Xs, (-1, 1)) + tf.reshape(X2s, (1, -1))
        r2 = tf.clip_by_value(r2, 0.0, self.MAX_DIST)
        r = tf.sqrt(r2 + 1e-12)

        kernel_matrix = (self.std_dev**2) * (1. + np.sqrt(3.) * r) * tf.exp(
            -np.sqrt(3.) * r)

        return (self.std_dev**2), (1. + np.sqrt(3.) * r), r
Example #6
0
    def kernel(self, points1, points2=None):
        if points2 is None:
            points2 = points1
            white_noise = self.white * util.eye(tf.shape(points1)[0])
        else:
            white_noise = 0.0

        # # Compute the euclidian distances
        # magnitude_square1 = tf.expand_dims(tf.reduce_sum(points1 ** 2, 1), 1)
        # magnitude_square2 = tf.expand_dims(tf.reduce_sum(points2 ** 2, 1), 1)

        # distances_root = tf.sqrt((magnitude_square1 - 2.0 * tf.matmul(points1, tf.transpose(points2)) +
        #              tf.transpose(magnitude_square2))) #Numerical stability problem!!
        # distances_root = tf.clip_by_value(distances_root, 0.0, self.MAX_DIST);

        # # Compute constant for 3/2
        # constant = np.sqrt(5.0)/self.lengthscale

        # # Compute the two terms goving the kernel
        # first_term=(1.0 + constant*distances_root + (5.0/3.0)*distances_root**2)
        # second_term = tf.exp(-constant*distances_root)

        # kernel_matrix = tf.multiply(first_term,second_term) * (self.std_dev ** 2)

        X = points1 / self.lengthscale
        Xs = tf.reduce_sum(tf.square(X), axis=1)

        X2 = points2 / self.lengthscale
        X2s = tf.reduce_sum(tf.square(X2), axis=1)
        r2 = -2.0 * tf.matmul(X, X2, transpose_b=True)
        r2 += tf.reshape(Xs, (-1, 1)) + tf.reshape(X2s, (1, -1))
        r = tf.sqrt(r2 + 1e-12)

        kernel_matrix = (self.std_dev**2) * (
            1. + np.sqrt(5.) * r + 5. / 3. * r2) * tf.exp(-np.sqrt(5.) * r)

        return kernel_matrix + white_noise