генерация на лету с набором данных api tensorflow

У меня есть функция, которая создает функции и целевые тензоры. Например.

x,t = myfunc() ##x,t tensors

Как я могу интегрировать это с API набора данных TensorFlow для непрерывного обучения? В идеале я хотел бы использовать набор данных для установки таких вещей, как пакет, преобразования.

Изменить для уточнения: проблема в том, что я хотел бы не просто поместить x и t в свой график, но сделать из них набор данных, чтобы я мог использовать ту же обработку набора данных, которую я реализовал для (обычных) конечных наборов данных, которые я могу загрузить в память и передать в тот же граф с помощью инициализируемого итератора.


person zephyrus    schedule 15.11.2017    source источник


Ответы (2)


Предполагая, что x и t являются объектами tf.Tensor, а my_func() строит график TensorFlow, вы можете использовать следующий подход с `Dataset.map():

# Creates an infinite dataset with a dummy value. You can make this finite by
# specifying an explicit number of elements to `repeat()`.
dummy_dataset = tf.data.Dataset.from_tensors(0).repeat(None)

# Evaluates `my_func` once for each element in `dummy_dataset`.
dataset = dummy_dataset.map(lambda _: my_func())
person mrry    schedule 04.12.2017
comment
Если я хочу выполнить вычисление my_func() на устройстве gpu по умолчанию, должен ли я поместить оболочку with tf.device('/device:GPU:1'): в первую, вторую или обе строки, которые вы предложенный? Это может иметь или не иметь значения, но my_func() в моем случае на самом деле является методом другого класса (т.е. my_class.my_func() - это то, что я фактически использовал бы в вашем коде) - так что я также должен использовать с tf .device('/device:GPU:1'): при создании экземпляра класса? - person zephyrus; 18.01.2018

Если x и t являются тензорами, вы можете создать набор данных, вызвав tf.data.Dataset.from_tensors или tf.data.Dataset.from_tensor_slices (документация здесь).

Разница между ними в том, что from_tensors объединяет входные тензоры в один элемент в наборе данных. from_tensor_slices создает набор данных с одним элементом для каждого среза.

person MatthewScarpino    schedule 15.11.2017
comment
Если я использую from_tensors, а затем пакетирую набор данных, вызовет ли он myfunc несколько раз? Я не хочу, чтобы один и тот же тензор повторялся несколько раз, если это имеет смысл? - person zephyrus; 16.11.2017
comment
Нет, я не думаю, что from_tensors будет вызывать myfunc несколько раз. Если вы хотите создать набор данных из функции генератора, вы можете вызвать Dataset.from_generator. - person MatthewScarpino; 16.11.2017
comment
правильно, но Dataset.from_generator не принимает генераторы, создающие объекты tensor - person zephyrus; 16.11.2017
comment
Вы хотите создать набор данных, тензоры которого будут меняться каждый раз, когда вы вызываете myfunc? Если это так, вы можете создать один набор данных, а затем объединять дополнительные данные по мере их появления. - person MatthewScarpino; 16.11.2017
comment
Нет, я хотел бы использовать что-то вроде from_generator, но немного другое. У меня есть два тензора, x и t, каждый раз, когда они вызываются на графике, они оценивают новые обучающие данные. Вы можете думать о них как о x = tf.random_uniform(args), t = tf.random_uniform(args). Имеет ли это смысл? - person zephyrus; 16.11.2017
comment
Проблема в том, что я хотел бы не просто поместить x и t в свой график, но создать из них набор данных, чтобы я мог использовать ту же обработку набора данных, которую я реализовал для (обычных) конечных наборов данных, которые я могу загрузить в память и передать в тот же граф с использованием инициализируемого итератора. - person zephyrus; 16.11.2017