A mutable hash table with faster lookups and higher memory usage.
Inherits From: TrackableResource
tf.lookup.experimental.DenseHashTable(
key_dtype,
value_dtype,
default_value,
empty_key,
deleted_key,
initial_num_buckets=None,
name='MutableDenseHashTable',
checkpoint=True,
experimental_is_anonymous=False
)
Data can be inserted by calling the insert method and removed by calling the
remove method. It does not support initialization via the init method.
Compared to MutableHashTable, DenseHashTable offers generally faster
insert, remove and lookup operations, in exchange for a higher overall
memory footprint.
It uses "open addressing" with quadratic reprobing to resolve collisions. This
requires specifying two keys in the key space, empty_key and deleted_key,
that can never inserted into the table.
Unlike MutableHashTable, DenseHashTable does not require additional memory
for temporary tensors created during checkpointing and restore operations.
Example usage:
table = tf.lookup.experimental.DenseHashTable(
key_dtype=tf.string,
value_dtype=tf.int64,
default_value=-1,
empty_key='',
deleted_key='$')
keys = tf.constant(['a', 'b', 'c'])
values = tf.constant([0, 1, 2], dtype=tf.int64)
table.insert(keys, values)
table.remove(tf.constant(['c']))
table.lookup(tf.constant(['a', 'b', 'c','d'])).numpy()
array([ 0, 1, -1, -1])
Args |
key_dtype
|
the type of the key tensors.
|
value_dtype
|
the type of the value tensors.
|
default_value
|
The value to use if a key is missing in the table.
|
empty_key
|
the key to use to represent empty buckets internally. Must not
be used in insert, remove or lookup operations.
|
deleted_key
|
the key to use to represent deleted buckets internally. Must
not be used in insert, remove or lookup operations and be different from
the empty_key.
|
initial_num_buckets
|
the initial number of buckets (optional,
default to 2^17=131072). Note that the default value is
relatively large (~1MB), so if you are going to create many
tables (likely the case when experimental_is_anonymous is
True), you should set initial_num_buckets to a smaller
value to reduce memory usage.
|
name
|
A name for the operation (optional).
|
checkpoint
|
if True, the contents of the table are saved to and restored
from checkpoints. If shared_name is empty for a checkpointed table, it
is shared using the table node name.
|
experimental_is_anonymous
|
Whether to use anonymous mode for the
table (default is False). In anonymous mode, the table
resource can only be accessed via a resource handle. It can't
be looked up by a name. When all resource handles pointing to
that resource are gone, the resource will be deleted
automatically.
|
Raises |
ValueError
|
If checkpoint is True and no name was specified.
|
Attributes |
key_dtype
|
The table key dtype.
|
name
|
The name of the table.
|
resource_handle
|
Returns the resource handle associated with this Resource.
|
value_dtype
|
The table value dtype.
|
Methods
erase
View source
erase(
keys, name=None
)
Removes keys and its associated values from the table.
If a key is not present in the table, it is silently ignored.
| Args |
keys
|
Keys to remove. Can be a tensor of any shape. Must match the table's
key type.
|
name
|
A name for the operation (optional).
|
| Returns |
|
The created Operation.
|
| Raises |
TypeError
|
when keys do not match the table data types.
|
export
View source
export(
name=None
)
Returns tensors of all keys and values in the table.
| Args |
name
|
A name for the operation (optional).
|
| Returns |
|
A pair of tensors with the first tensor containing all keys and the
second tensors containing all values in the table.
|
insert
View source
insert(
keys, values, name=None
)
Associates keys with values.
| Args |
keys
|
Keys to insert. Can be a tensor of any shape. Must match the table's
key type.
|
values
|
Values to be associated with keys. Must be a tensor of the same
shape as keys and match the table's value type.
|
name
|
A name for the operation (optional).
|
| Returns |
|
The created Operation.
|
| Raises |
TypeError
|
when keys or values doesn't match the table data
types.
|
insert_or_assign
View source
insert_or_assign(
keys, values, name=None
)
Associates keys with values.
| Args |
keys
|
Keys to insert. Can be a tensor of any shape. Must match the table's
key type.
|
values
|
Values to be associated with keys. Must be a tensor of the same
shape as keys and match the table's value type.
|
name
|
A name for the operation (optional).
|
| Returns |
|
The created Operation.
|
| Raises |
TypeError
|
when keys or values doesn't match the table data
types.
|
lookup
View source
lookup(
keys, name=None
)
Looks up keys in a table, outputs the corresponding values.
The default_value is used for keys not present in the table.
| Args |
keys
|
Keys to look up. Can be a tensor of any shape. Must match the
table's key_dtype.
|
name
|
A name for the operation (optional).
|
| Returns |
A tensor containing the values in the same shape as keys using the
table's value type.
|
| Raises |
TypeError
|
when keys do not match the table data types.
|
remove
View source
remove(
keys, name=None
)
Removes keys and its associated values from the table.
If a key is not present in the table, it is silently ignored.
| Args |
keys
|
Keys to remove. Can be a tensor of any shape. Must match the table's
key type.
|
name
|
A name for the operation (optional).
|
| Returns |
|
The created Operation.
|
| Raises |
TypeError
|
when keys do not match the table data types.
|
size
View source
size(
name=None
)
Compute the number of elements in this table.
| Args |
name
|
A name for the operation (optional).
|
| Returns |
|
A scalar tensor containing the number of elements in this table.
|
__getitem__
View source
__getitem__(
keys
)
Looks up keys in a table, outputs the corresponding values.