def K(self, X, X2=None, presliced=False):
if not presliced:
X, X2 = self._slice(X, X2)
X_denominator = tf.sqrt(self._weighted_product(X))
if X2 is None:
X2 = X
X2_denominator = X_denominator
else:
X2_denominator = tf.sqrt(self._weighted_product(X2))
numerator = self._weighted_product(X, X2)
cos_theta = numerator / X_denominator[:, None] / X2_denominator[None, :]
jitter = 1e-15
theta = tf.acos(jitter + (1 - 2 * jitter) * cos_theta)
return self.variance * (1. / np.pi) * self._J(theta) * \
X_denominator[:, None] ** self.order * \
X2_denominator[None, :] ** self.order
python类acos()的实例源码
def angularErrorTotal(pred, gt, weight, ss, outputChannels=2):
with tf.name_scope("angular_error"):
pred = tf.reshape(pred, (-1, outputChannels))
gt = tf.to_float(tf.reshape(gt, (-1, outputChannels)))
weight = tf.to_float(tf.reshape(weight, (-1, 1)))
ss = tf.to_float(tf.reshape(ss, (-1, 1)))
pred = tf.nn.l2_normalize(pred, 1) * 0.999999
gt = tf.nn.l2_normalize(gt, 1) * 0.999999
errorAngles = tf.acos(tf.reduce_sum(pred * gt, reduction_indices=[1], keep_dims=True))
lossAngleTotal = tf.reduce_sum((tf.abs(errorAngles*errorAngles))*ss*weight)
return lossAngleTotal
def exceedingAngleThreshold(pred, gt, ss, threshold, outputChannels=2):
with tf.name_scope("angular_error"):
pred = tf.reshape(pred, (-1, outputChannels))
gt = tf.to_float(tf.reshape(gt, (-1, outputChannels)))
ss = tf.to_float(tf.reshape(ss, (-1, 1)))
pred = tf.nn.l2_normalize(pred, 1) * 0.999999
gt = tf.nn.l2_normalize(gt, 1) * 0.999999
errorAngles = tf.acos(tf.reduce_sum(pred * gt, reduction_indices=[1], keep_dims=True)) * ss
exceedCount = tf.reduce_sum(tf.to_float(tf.less(threshold/180*3.14159, errorAngles)))
return exceedCount
def setUp(self):
super(CoreUnaryOpsTest, self).setUp()
self.ops = [
('abs', operator.abs, tf.abs, core.abs_function),
('neg', operator.neg, tf.neg, core.neg),
# TODO(shoyer): add unary + to core TensorFlow
('pos', None, None, None),
('sign', None, tf.sign, core.sign),
('reciprocal', None, tf.reciprocal, core.reciprocal),
('square', None, tf.square, core.square),
('round', None, tf.round, core.round_function),
('sqrt', None, tf.sqrt, core.sqrt),
('rsqrt', None, tf.rsqrt, core.rsqrt),
('log', None, tf.log, core.log),
('exp', None, tf.exp, core.exp),
('log', None, tf.log, core.log),
('ceil', None, tf.ceil, core.ceil),
('floor', None, tf.floor, core.floor),
('cos', None, tf.cos, core.cos),
('sin', None, tf.sin, core.sin),
('tan', None, tf.tan, core.tan),
('acos', None, tf.acos, core.acos),
('asin', None, tf.asin, core.asin),
('atan', None, tf.atan, core.atan),
('lgamma', None, tf.lgamma, core.lgamma),
('digamma', None, tf.digamma, core.digamma),
('erf', None, tf.erf, core.erf),
('erfc', None, tf.erfc, core.erfc),
('lgamma', None, tf.lgamma, core.lgamma),
]
total_size = np.prod([v.size for v in self.original_lt.axes.values()])
self.test_lt = core.LabeledTensor(
tf.cast(self.original_lt, tf.float32) / total_size,
self.original_lt.axes)
def angular_func(self, cos_angles):
angles = tf.acos(cos_angles)
sin_angles = tf.sin(angles)
pi_diff = np.pi - angles
if self.degree == 0:
return pi_diff
elif self.degree == 1:
return sin_angles + pi_diff * cos_angles
elif self.degree == 2:
return 3 * sin_angles * cos_angles + pi_diff * (1 + 2 * cos_angles ** 2)
else:
assert False
def test_Acos(self):
t = tf.acos(self.random(4, 3))
self.check(t)