Накопление переменной при обновлении значений dict? (Попытка реализовать SGD импульс)

#python #tensorflow #list-comprehension #momentum #stochastic-gradient

Вопрос:

Итак, у меня есть следующий словарь, реализованный для vanilla SGD:

         update_weights = dict(zip(weight_keys,
                                [grad_weight[key] -
                                 lr * convert_to_tensor(dx[key])]) for key in weight_keys)
 

Я пытаюсь реализовать что-то подобное с momentum, однако я не уверен, как я смогу накопить термин скорости, чтобы я мог обновить его все сразу в терминах понимания списка:

 v_(i) = mu * v_(i-1) - lr * convert_to_tensor(dx[key])
grad_weight[key]  = v_i
 

у кого-нибудь есть идеи, как я мог бы это сделать, используя понимание списка (предпочтительно с помощью Tensorflow)?

 for key in weight_keys:
     v = mu * v - lr * convert_to_tensor(dx[key])
     update_weights[key] = grad_weight[key]   v
 

Комментарии:

1. Почему вам нужно, чтобы это было понимание списка?

2. Разве это не было бы намного быстрее? Я спрашиваю, есть ли способ.

3. Почему вы пытаетесь реализовать это вручную? Просто используйте tf.keras.optimizers.SGD ; у него есть параметр импульса.

4. Это для конкретной программы, в которой оптимизаторы keras не достигают того, что мне нужно.

5. Это может быть немного быстрее, но недостаточно, чтобы вы заботились об этом. Я не понимаю, почему программисты кажутся такими одержимыми пониманием списков и размещением всего в одной строке. Если то, что у вас есть, работает, то в этом нет ничего плохого. Если не очевидно, как это понять, возможно, результат будет трудно прочесть, даже если вы найдете способ. Читабельность важна. То, что у вас есть сейчас, очень читабельно, и нет причин не использовать его. Но если вы найдете способ использовать понимание и сделать его читабельным, тогда отлично!