Caffe2 - Python API
A deep learning, cross platform ML framework
normalization.py
1 
3 from __future__ import absolute_import
4 from __future__ import division
5 from __future__ import print_function
6 from __future__ import unicode_literals
7 
8 from caffe2.python import core
9 
10 
11 def LRN(model, blob_in, blob_out, **kwargs):
12  """LRN"""
13  return model.net.LRN(
14  blob_in,
15  [blob_out, "_" + blob_out + "_scale"],
16  order=model.order,
17  **kwargs
18  )[0]
19 
20 
21 def Softmax(model, blob_in, blob_out=None, use_cudnn=False, **kwargs):
22  """Softmax."""
23  if use_cudnn:
24  kwargs['engine'] = 'CUDNN'
25  if blob_out is not None:
26  return model.net.Softmax(blob_in, blob_out, **kwargs)
27  else:
28  return model.net.Softmax(blob_in, **kwargs)
29 
30 
31 def InstanceNorm(model, blob_in, blob_out, dim_in, order="NCHW", **kwargs):
32  blob_out = blob_out or model.net.NextName()
33  # Input: input, scale, bias
34  # Output: output, saved_mean, saved_inv_std
35  # scale: initialize with ones
36  # bias: initialize with zeros
37 
38  def init_blob(value, suffix):
39  return model.param_init_net.ConstantFill(
40  [], blob_out + "_" + suffix, shape=[dim_in], value=value)
41  scale, bias = init_blob(1.0, "s"), init_blob(0.0, "b")
42 
43  model.params.extend([scale, bias])
44  model.weights.append(scale)
45  model.biases.append(bias)
46  blob_outs = [blob_out, blob_out + "_sm", blob_out + "_siv"]
47  if 'is_test' in kwargs and kwargs['is_test']:
48  blob_outputs = model.net.InstanceNorm(
49  [blob_in, scale, bias], [blob_out],
50  order=order, **kwargs)
51  return blob_outputs
52  else:
53  blob_outputs = model.net.InstanceNorm(
54  [blob_in, scale, bias], blob_outs,
55  order=order, **kwargs)
56  # Return the output
57  return blob_outputs[0]
58 
59 
60 def SpatialBN(model, blob_in, blob_out, dim_in, order="NCHW", **kwargs):
61  blob_out = blob_out or model.net.NextName()
62  # Input: input, scale, bias, est_mean, est_inv_var
63  # Output: output, running_mean, running_inv_var, saved_mean,
64  # saved_inv_var
65  # scale: initialize with ones
66  # bias: initialize with zeros
67  # est mean: zero
68  # est var: ones
69 
70  def init_blob(value, suffix):
71  return model.param_init_net.ConstantFill(
72  [], blob_out + "_" + suffix, shape=[dim_in], value=value)
73 
74  if model.init_params:
75  scale, bias = init_blob(1.0, "s"), init_blob(0.0, "b")
76  running_mean = init_blob(0.0, "rm")
77  running_inv_var = init_blob(1.0, "riv")
78  else:
80  blob_out + '_s', model.param_init_net)
82  blob_out + '_b', model.param_init_net)
83  running_mean = core.ScopedBlobReference(
84  blob_out + '_rm', model.param_init_net)
85  running_inv_var = core.ScopedBlobReference(
86  blob_out + '_riv', model.param_init_net)
87 
88  model.params.extend([scale, bias])
89  model.computed_params.extend([running_mean, running_inv_var])
90  model.weights.append(scale)
91  model.biases.append(bias)
92  blob_outs = [blob_out, running_mean, running_inv_var,
93  blob_out + "_sm", blob_out + "_siv"]
94  if 'is_test' in kwargs and kwargs['is_test']:
95  blob_outputs = model.net.SpatialBN(
96  [blob_in, scale, bias, blob_outs[1], blob_outs[2]], [blob_out],
97  order=order, **kwargs)
98  return blob_outputs
99  else:
100  blob_outputs = model.net.SpatialBN(
101  [blob_in, scale, bias, blob_outs[1], blob_outs[2]], blob_outs,
102  order=order, **kwargs)
103  # Return the output
104  return blob_outputs[0]
def LRN(model, blob_in, blob_out, kwargs)
def ScopedBlobReference(name, args, kwargs)
Definition: core.py:212
def Softmax(model, blob_in, blob_out=None, use_cudnn=False, kwargs)