tf.contrib.training.batch_sequences_with_states
Создаёт пакеты сегментов последовательного ввода.
tf.contrib.training.batch_sequences_with_states(
input_key, input_sequences, input_context, input_length, initial_states,
num_unroll, batch_size, num_threads=3, capacity=1000, allow_small_batch=True,
pad=True, make_keys_unique=False, make_keys_unique_seed=None, name=None
)
Этот метод создаёт SequenceQueueingStateSaver (SQSS) и добавляет его в очереди-запускатели. Он возвращает NextQueuedSequenceBatch.
Он принимает по одному примеру за раз, идентифицируемому уникальным input_key. input_sequence — это словарь со значениями, которые являются тензорами со временем как первым измерением. Это измерение времени должно быть одинаковым для всех тензоров одного примера. Оно может изменяться между примерами. Хотя оно всегда должно быть кратно num_unroll. Поэтому, возможно, необходима загрузка, и она включена по умолчанию в pad=True.
input_length — это скалярный тензор или целое число, записывающее измерение времени до загрузки. Оно должно быть от 0 до измерения времени. Одна из причин, по которой мы хотим отслеживать это, заключается в том, чтобы мы могли учитывать его при вычислении потерь. Если pad=True, то input_length может быть None и будет определено.
Этот метод сегментирует input_sequence на сегменты длиной num_unroll. Он группирует последовательности ввода из batch_size примеров. Эти мини-пакеты доступны через свойство sequence вывода. Кроме того, для каждой записи в пакете мы можем получить доступ к её исходному input_key в key и её длине ввода в total_length. length записывает в этом сегменте, сколько не загруженных временных шагов существует.
Статические характеристики примера, которые не меняются во времени, могут быть частью input_context, словаря со значениями тензора. Этот метод копирует контекст для каждого сегмента и делает его доступным в context вывода.
Этот метод может поддерживать и обновлять состояние для каждого примера. Он принимает некоторые initial_states как словарь со значениями тензора. В первом мини-пакете, содержащем пример, initial_states являются записью в state. Если вызов save_state, то следующий сегмент будет иметь обновлённую запись в state. См. NextQueuedSequenceBatch для полного списка свойств и методов.
Пример использования:
batch_size = 32
num_unroll = 20
num_enqueue_threads = 3
lstm_size = 8
cell = tf.compat.v1.nn.rnn_cell.BasicLSTMCell(num_units=lstm_size)
key, sequences, context = my_parser(raw_data)
initial_state_values = tf.zeros((state_size,), dtype=tf.float32)
initial_states = {"lstm_state": initial_state_values}
batch = tf.batch_sequences_with_states(
input_key=key,
input_sequences=sequences,
input_context=context,
input_length=tf.shape(sequences["input"])[0],
initial_states=initial_states,
num_unroll=num_unroll,
batch_size=batch_size,
num_threads=num_enqueue_threads,
capacity=batch_size * num_enqueue_threads * 2)
inputs = batch.sequences["input"]
context_label = batch.context["label"]
inputs_by_time = tf.split(value=inputs, num_or_size_splits=num_unroll, axis=1)
assert len(inputs_by_time) == num_unroll
lstm_output, _ = tf.contrib.rnn.static_state_saving_rnn(
cell,
inputs_by_time,
state_saver=batch,
state_name="lstm_state")
# Start a prefetcher in the background
sess = tf.compat.v1.Session()
tf.compat.v1.train.start_queue_runners(sess=session)
while True:
# Step through batches, perform training or inference...
session.run([lstm_output])
| Аргументы | |
|---|---|
input_key | Скалярная строка Tensor, уникальный ключ для данного входного примера. Он используется для отслеживания элементов разделенного мини-пакета этого ввода. Группированные ключи текущей итерации доступны через свойство key. Форма input_key (скаляр) должна быть полностью указана. Рассмотрите возможность установки make_keys_unique в значение True при многократном повторении одного и того же ввода. Примечание: если |
input_sequences | Словарь, сопоставляющий строковые имена со значениями Tensor. Значения должны иметь одинаковое первое измерение, называемое value_length. Они могут отличаться от примера к примеру. Остальная часть формы (кроме первого измерения) должна быть полностью указана. SequenceQueueingStateSaver разделит эти тензоры по этому первому измерению на элементы мини-пакета с измерением num_unrolled. Группированные и сегментированные последовательности текущей итерации доступны через свойство sequences.Примечание: если |
input_context | Словарь, сопоставляющий строковые имена со значениями Tensor. Значения рассматриваются как "глобальные" для всех временных разделов данного входного примера и будут копироваться для всех элементов мини-пакета соответственно. Группированные и скопированные контексты текущей итерации доступны через свойство context.Примечание: Все значения input_context должны иметь полностью определённые формы. |
input_length | None или скаляр int32 Tensor, длина последовательности до загрузки. Если input_length=None и pad=True то длина будет определена и равна value_length. Если pad=False тогда input_length не может быть None: input_length должен быть указан. Форма input_length (скаляр) должна быть полностью указана. Его значение может быть не более value_length для любого данного ввода (см. определение value_length выше). Группированные и общие длины текущей итерации доступны через свойства length и total_length соответственно. |
initial_states | Словарь, сопоставляющий строковые имена состояний со значениями многомерных значений (например, константы или тензоры). Этот вход определяет набор состояний, которые будут отслеживаться во время вычислений и к которым можно получить доступ с помощью методов state и save_state.Примечание: Все значения initial_state должны иметь полностью определённые формы. |
num_unroll | Целое число Python, сколько временных шагов разворачивать за раз. Последовательности ввода длиной k затем разбиваются на k / num_unroll сегментов. |
batch_size | Скаляр int или int32 Tensor, размер мини-пакетов при доступе к методу state() и свойствам context, sequences и т.д. |
num_threads | Количество потоков, которые добавляют примеры ввода в очередь. |
capacity | Максимальная ёмкость очереди в количестве примеров. Должно быть как минимум batch_size. По умолчанию 1000. При многократном повторении одного и того же входного примера с повторным использованием их ключей capacity должна быть меньше количества примеров. |
allow_small_batch | Если true, очередь вернёт меньшие пакеты, когда нет достаточно входных примеров для заполнения всего пакета и достигнута граница ввода. |
pad | Если True, input_sequences будет дополнено до кратного num_unroll. В этом случае input_length может быть None и предполагается, что это длина первого измерения значений в input_sequences (т.е. value_length). |
make_keys_unique | Добавлять случайное целое число в input_key для повышения уникальности. Зерно можно установить через make_keys_unique_seed. |
make_keys_unique_seed | Если make_keys_unique=True, это устанавливает зерно для генерации случайного постфикса. |
name | Строка имени операции (необязательно). |
| Возвращает | |
|---|---|
| NextQueuedSequenceBatch с сегментированным и сгруппированным вводом и их состояниями. |
| Исключения | |
|---|---|
TypeError | если любой из входов не является ожидаемого типа. |
ValueError | если какое-либо из входных значений не согласуется, например, если от входных данных недостаточно информации о форме для построения сохранителя состояния. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/training/batch_sequences_with_states