Ich habe einige Fragen in Bezug auf die folgende CodesegmentFragen zur Definition und Aufruf train.momentumoptimizer
def _optimizer(self,training_iters, global_step, opt_kwargs={}):
learning_rate = self.opt_kwargs.pop("learning_rate", 0.2)
decay_rate = self.opt_kwargs.pop("decay_rate", 0.95)
self.learning_rate_node = tf.train.exponential_decay(learning_rate=learning_rate,
global_step=global_step,
decay_steps=training_iters,
decay_rate=decay_rate,
staircase=True)
optimizer = tf.train.MomentumOptimizer(learning_rate=self.learning_rate_node,
**self.opt_kwargs).minimize(self.net.cost,
global_step=global_step)
Der Eingang pararameter von opt_kwargs
ist Setup als opt_kwargs=dict(momentum=0.2)
Warum brauchen wir self.opt_kwargs.pop("learning_rate", 0.2)
verwenden learning_rate
zuzuweisen. Meine Vermutung ist, dass auf diese Weise die Informationen zu Lerngeschwindigkeit und Abklingrate in die dict-Struktur von opt_kwargs injiziert werden können. Aber ich sehe den wirklichen Gebrauch hier nicht.
Zweitens in Bezug auf tf.train.MomentumOptimizer(learning_rate=self.learning_rate_node, **self.opt_kwargs)
, sieht aus wie **self.opt_kwargs
wird die ganzen opt_kwargs
dict in die MomentumOptimizer
passieren. Nach tf.train.MomentumOptimizer.init(learning_rate, momentum, use_locking=False, name='Momentum', use_nesterov=False) benötigt es jedoch nur den Impulswert. Hier gehen wir sowohl learning_rate
als auch decay_rate
vorbei, die in self.opt_kwargs
enthalten sind. Ist das ein richtiger Weg?