#tensorflow #tensorflow2.0 #tensorflow-probability
#tensorflow #tensorflow2.0 #tensorflow-вероятность
Вопрос:
Я создаю модель для прогнозирования временных рядов с вероятностью Tensorflow, следуя этому руководству. В этих примерах мне нужно передавать все данные сразу, но это недопустимо при работе с большими данными (мой случай), как я должен передавать пакеты или любые другие данные, загруженные с задержкой, в этот инструмент?
Комментарии:
1. Не уверен в вероятности tensorflow, но для tensorflow keras у нас есть такие методы, как train_on_batch, где вы можете просто передавать один пакет за раз.
2. Спасибо, это действительно просто и хорошо документировано для tensorflow keras и пользовательских циклов обучения tensorflow, но не для tfp.
Ответ №1:
Это общая проблема для большинства случаев вероятностного вывода: использование большинства градиентов неполного пакета приведет к смещенным выборкам.
Вы должны быть в состоянии написать target_log_prob_fn
с tf.custom_gradient
для перебора tf.data.Dataset
итератора. Поскольку целевая logprob является скалярной, вы можете накапливать как градиенты, так и logprob, по мере выполнения функции по всем мини-пакетам в наборе данных.
ds = build_dataset()
def build_model(params):
return time_series_model(..)
@tf.custom_gradient
@tf.function # autograph should turn the dataset loop into a tf.while_loop.
def log_prob(*params):
total_lp = 0.
total_grad = tf.nest.map_structure(tf.zeros_like, params)
for batch in ds:
lp, grad = tfp.math.value_and_gradient(
lambda *p: build_model(p).log_prob(batch),
params)
total_lp = lp
total_grad = tf.nest.map_structure(lambda x,y: x y, total_grad, grad)
return total_lp, lambda dy: tf.nest.map_structure(lambda g: dy*g, total_grad)
Комментарии:
1. можете ли вы дать мне несколько ссылок? Я хотел бы понять, что такое
params
и какая функция должна возвращаться.