in supervised_reptile/reptile.py [0:0]
def train_step(self,
dataset,
input_ph,
label_ph,
minimize_op,
num_classes,
num_shots,
inner_batch_size,
inner_iters,
replacement,
meta_step_size,
meta_batch_size):
"""
Perform a Reptile training step.
Args:
dataset: a sequence of data classes, where each data
class has a sample(n) method.
input_ph: placeholder for a batch of samples.
label_ph: placeholder for a batch of labels.
minimize_op: TensorFlow Op to minimize a loss on the
batch specified by input_ph and label_ph.
num_classes: number of data classes to sample.
num_shots: number of examples per data class.
inner_batch_size: batch size for every inner-loop
training iteration.
inner_iters: number of inner-loop iterations.
replacement: sample with replacement.
meta_step_size: interpolation coefficient.
meta_batch_size: how many inner-loops to run.
"""
old_vars = self._model_state.export_variables()
new_vars = []
for _ in range(meta_batch_size):
mini_dataset = _sample_mini_dataset(dataset, num_classes, num_shots)
for batch in _mini_batches(mini_dataset, inner_batch_size, inner_iters, replacement):
inputs, labels = zip(*batch)
if self._pre_step_op:
self.session.run(self._pre_step_op)
self.session.run(minimize_op, feed_dict={input_ph: inputs, label_ph: labels})
new_vars.append(self._model_state.export_variables())
self._model_state.import_variables(old_vars)
new_vars = average_vars(new_vars)
self._model_state.import_variables(interpolate_vars(old_vars, new_vars, meta_step_size))