def rational_quadratic_kernel(self, z_1, z_2=None, alpha=1): if z_2 is None: squared_dists_all = (z_1[:,np.newaxis,:]-z_1[np.newaxis,:,:])**2 squared_dists = helper.tf_remove_diagonal(squared_dists_all, first_dim_size=tf.shape(z_1)[0], second_dim_size=tf.shape(z_1)[0]) else: squared_dists = (z_2[:,np.newaxis,:]-z_1[np.newaxis,:,:])**2 z_diff_norm_sq = tf.reduce_sum(squared_dists, axis=[-1], keep_dims=True) C = 1+z_diff_norm_sq/(2*alpha) if alpha == 1: return C else: return tf.pow(C, -alpha)
def inv_multiquadratics_kernel(self, z_1, z_2=None, sigma_z_sq=1): if z_2 is None: squared_dists_all = (z_1[:,np.newaxis,:]-z_1[np.newaxis,:,:])**2 squared_dists = helper.tf_remove_diagonal(squared_dists_all, first_dim_size=tf.shape(z_1)[0], second_dim_size=tf.shape(z_1)[0]) else: squared_dists = (z_2[:,np.newaxis,:]-z_1[np.newaxis,:,:])**2 z_diff_norm_sq = tf.reduce_sum(squared_dists, axis=[-1], keep_dims=True) n_dim = z_1.get_shape().as_list()[-1] C = 2*n_dim*sigma_z_sq return C/(C+z_diff_norm_sq)