in iep/models/module_net.py [0:0]
def _forward_modules_json(self, feats, program):
def gen_hook(i, j):
def hook(grad):
self.all_module_grad_outputs[i][j] = grad.data.cpu().clone()
return hook
self.all_module_outputs = []
self.all_module_grad_outputs = []
# We can't easily handle minibatching of modules, so just do a loop
N = feats.size(0)
final_module_outputs = []
for i in range(N):
if self.save_module_outputs:
self.all_module_outputs.append([])
self.all_module_grad_outputs.append([None] * len(program[i]))
module_outputs = []
for j, f in enumerate(program[i]):
f_str = iep.programs.function_to_str(f)
module = self.function_modules[f_str]
if f_str == 'scene':
module_inputs = [feats[i:i+1]]
else:
module_inputs = [module_outputs[j] for j in f['inputs']]
module_outputs.append(module(*module_inputs))
if self.save_module_outputs:
self.all_module_outputs[-1].append(module_outputs[-1].data.cpu().clone())
module_outputs[-1].register_hook(gen_hook(i, j))
final_module_outputs.append(module_outputs[-1])
final_module_outputs = torch.cat(final_module_outputs, 0)
return final_module_outputs