tensorflow:: ops:: CompareAndBitpack

#include <math_ops.h>

Compare values of input to threshold and pack resulting bits into a uint8 .

Summary

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]

NOTE : Currently, the innermost dimension of the tensor must be divisible by 8.

Given an input shaped [s0, s1, ..., s_n] , the output is a uint8 tensor shaped [s0, s1, ..., s_n / 8] .

Args:

  • scope: A Scope object
  • input: Values to compare against threshold and bitpack.
  • threshold: Threshold to compare against.

Returns:

Constructors and Destructors

CompareAndBitpack (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input threshold)

Public attributes

operation
output

Public functions

node () const
::tensorflow::Node *
operator::tensorflow::Input () const
operator::tensorflow::Output () const

Public attributes

operation

Operation operation

output

::tensorflow::Output output

Public functions

CompareAndBitpack

 CompareAndBitpack(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input threshold
)

node

::tensorflow::Node * node() const 

operator::tensorflow::Input

 operator::tensorflow::Input() const 

operator::tensorflow::Output

 operator::tensorflow::Output() const