Я пытаюсь протестировать эту статью Динами c Локальное сожаление по поводу невыпуклых онлайн-прогнозов . Авторы любезно разместили свой код на github , но он написан на PyTorch, и я использую Keras / TF (1.4). Поэтому мне нужно перенести код на себя.
Идея их оптимизатора очень проста:
- Пусть
window
будет скользящим окном прошлых градиентов - Каждый раз
t
, обновлять веса по экспоненциально взвешенной сумме прошлых window
градиентов, оцененных по текущему weights
Я дошел до этой части их кода:
for p in group['params']:
sum_grad = 0
denominator = 0
for i in range(len(self.grad_list)):
sum_grad += (math.pow(self.a, len(self.grad_list) - 1 - i) * self.grad_list[i][count])
denominator += math.pow(self.a, len(self.grad_list) - 1 - i)
result_grad = sum_grad / denominator
p.data.add_(-group['lr'] / math.sqrt(t), result_grad)
count += 1
Я понимаю, что TF работает так: все символично c. Итак, как вы храните список в TF?