in mmdnn/conversion/onnx/onnx_emitter.py [0:0]
def emit_BatchNorm(self, IR_node):
epsilon = IR_node.get_attr('epsilon')
if IR_node.get_attr('scale'):
self.add_body(1, "{:15} = _weights_dict['{}']['scale'].squeeze()".format(
IR_node.variable_name + '_scale_array',
IR_node.name))
else:
self.add_body(1, "{:15} = np.ndarray(_weights_dict['{}']['bias'].shape, dtype=_weights_dict['{}']['bias'].dtype).squeeze()".format(
IR_node.variable_name + '_scale_array',
IR_node.name,
IR_node.name))
self.add_body(1, "{:15}.fill(1)".format(IR_node.variable_name + '_scale_array'))
self.add_body(1, "{:15} = helper.make_tensor_value_info('{}', onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], list({}.shape))".format(
IR_node.variable_name + '_scale',
IR_node.variable_name + '_scale',
IR_node.variable_name + '_scale_array',
IR_node.variable_name + '_scale_array'))
self.add_body(1, "{:15} = helper.make_tensor(name='{}', data_type=onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], dims={}.shape, vals={})".format(
IR_node.variable_name + '_scale_init',
IR_node.variable_name + '_scale',
IR_node.variable_name + '_scale_array',
IR_node.variable_name + '_scale_array',
IR_node.variable_name + '_scale_array'))
self.add_body(1, "{:15} = _weights_dict['{}']['bias'].squeeze()".format(
IR_node.variable_name + '_bias_array',
IR_node.name))
self.add_body(1, "{:15} = helper.make_tensor_value_info('{}', onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], list({}.shape))".format(
IR_node.variable_name + '_bias',
IR_node.variable_name + '_bias',
IR_node.variable_name + '_bias_array',
IR_node.variable_name + '_bias_array'))
self.add_body(1, "{:15} = helper.make_tensor(name='{}', data_type=onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], dims={}.shape, vals={}.flatten().astype(float))".format(
IR_node.variable_name + '_bias_init',
IR_node.variable_name + '_bias',
IR_node.variable_name + '_bias_array',
IR_node.variable_name + '_bias_array',
IR_node.variable_name + '_bias_array'))
self.add_body(1, "{:15} = _weights_dict['{}']['mean'].squeeze()".format(
IR_node.variable_name + '_mean_array',
IR_node.name))
self.add_body(1, "{:15} = helper.make_tensor_value_info('{}', onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], list({}.shape))".format(
IR_node.variable_name + '_mean',
IR_node.variable_name + '_mean',
IR_node.variable_name + '_mean_array',
IR_node.variable_name + '_mean_array'))
self.add_body(1, "{:15} = helper.make_tensor(name='{}', data_type=onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], dims={}.shape, vals={}.flatten().astype(float))".format(
IR_node.variable_name + '_mean_init',
IR_node.variable_name + '_mean',
IR_node.variable_name + '_mean_array',
IR_node.variable_name + '_mean_array',
IR_node.variable_name + '_mean_array'))
self.add_body(1, "{:15} = _weights_dict['{}']['var'].squeeze()".format(
IR_node.variable_name + '_var_array',
IR_node.name))
self.add_body(1, "{:15} = helper.make_tensor_value_info('{}', onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], list({}.shape))".format(
IR_node.variable_name + '_var',
IR_node.variable_name + '_var',
IR_node.variable_name + '_var_array',
IR_node.variable_name + '_var_array'))
self.add_body(1, "{:15} = helper.make_tensor(name='{}', data_type=onnx.mapping.NP_TYPE_TO_TENSOR_TYPE[{}.dtype], dims={}.shape, vals={}.flatten().astype(float))".format(
IR_node.variable_name + '_var_init',
IR_node.variable_name + '_var',
IR_node.variable_name + '_var_array',
IR_node.variable_name + '_var_array',
IR_node.variable_name + '_var_array'))
self.add_body(1, "{:15} = helper.make_node('BatchNormalization', inputs=['{}', '{}', '{}', '{}', '{}'],outputs=['{}'], epsilon={}, is_test={}, name='{}')".format(
IR_node.variable_name,
self.parent_variable_name(IR_node),
IR_node.variable_name + '_scale',
IR_node.variable_name + '_bias',
IR_node.variable_name + '_mean',
IR_node.variable_name + '_var',
IR_node.variable_name,
epsilon,
0 if self.phase == 'train' else 1,
IR_node.variable_name))
self.initializer.append(IR_node.variable_name + '_scale_init')
self.initializer.append(IR_node.variable_name + '_bias_init')
self.initializer.append(IR_node.variable_name + '_mean_init')
self.initializer.append(IR_node.variable_name + '_var_init')
self.inputs.append(IR_node.variable_name + '_scale')
self.inputs.append(IR_node.variable_name + '_bias')
self.inputs.append(IR_node.variable_name + '_mean')
self.inputs.append(IR_node.variable_name + '_var')
self.nodes.append(IR_node.variable_name)