Compare values of input
to threshold
and pack resulting bits into a uint8
.
tf.raw_ops.CompareAndBitpack(
input, threshold, name=None
)
Each comparison returns a boolean true
(if input_value > threshold
)
or and false
otherwise.
This operation is useful for Locality-Sensitive-Hashing (LSH) and other
algorithms that use hashing approximations of cosine and L2
distances;
codes can be generated from an input via:
codebook_size = 50
codebook_bits = codebook_size * 32
codebook = tf.get_variable('codebook', [x.shape[-1].value, codebook_bits],
dtype=x.dtype,
initializer=tf.orthogonal_initializer())
codes = compare_and_threshold(tf.matmul(x, codebook), threshold=0.)
codes = tf.bitcast(codes, tf.int32) # go from uint8 to int32
# now codes has shape x.shape[:-1] + [codebook_size]
Given an input
shaped [s0, s1, ..., s_n]
, the output is
a uint8
tensor shaped [s0, s1, ..., s_n / 8]
.
Args | |
---|---|
input
|
A Tensor . Must be one of the following types: bool , half , float32 , float64 , int8 , int16 , int32 , int64 .
Values to compare against threshold and bitpack.
|
threshold
|
A Tensor . Must have the same type as input .
Threshold to compare against.
|
name
|
A name for the operation (optional). |
Returns | |
---|---|
A Tensor of type uint8 .
|