#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. Это может быть немного быстрее, но недостаточно, чтобы вы заботились об этом. Я не понимаю, почему программисты кажутся такими одержимыми пониманием списков и размещением всего в одной строке. Если то, что у вас есть, работает, то в этом нет ничего плохого. Если не очевидно, как это понять, возможно, результат будет трудно прочесть, даже если вы найдете способ. Читабельность важна. То, что у вас есть сейчас, очень читабельно, и нет причин не использовать его. Но если вы найдете способ использовать понимание и сделать его читабельным, тогда отлично!