Caffe2 - Python API
A deep learning, cross platform ML framework
fc.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, schema
9 from caffe2.python.layers.layers import (
10  ModelLayer,
11  LayerParameter
12 )
13 from caffe2.python.layers.sampling_trainable_mixin import SamplingTrainableMixin
14 import math
15 import numpy as np
16 
17 
18 class FC(SamplingTrainableMixin, ModelLayer):
19 
20  def __init__(self, model, input_record, output_dims, weight_init=None,
21  bias_init=None, weight_optim=None, bias_optim=None, name='fc',
22  **kwargs):
23  super(FC, self).__init__(model, name, input_record, **kwargs)
24  assert isinstance(input_record, schema.Scalar), "Incorrect input type"
25  assert len(input_record.field_types()[0].shape) > 0, (
26  "FC expects limited dimensions of the input tensor")
27 
28  input_dims = input_record.field_types()[0].shape[0]
29  assert input_dims > 0, (
30  "FC expects input dimensions > 0, got {}".format(input_dims))
31 
33  (np.float32, (output_dims, )),
34  model.net.NextScopedBlob(name + '_output')
35  )
36 
37  scale = math.sqrt(1.0 / input_dims)
38  weight_init = weight_init if weight_init else (
39  'UniformFill', {'min': -scale, 'max': scale})
40  bias_init = bias_init if bias_init else (
41  'UniformFill', {'min': -scale, 'max': scale})
42 
43  self.w = model.net.NextScopedBlob(name + "_w")
44  self.b = model.net.NextScopedBlob(name + "_b")
45 
46  self.params.append(
47  LayerParameter(
48  parameter=self.w,
49  initializer=core.CreateOperator(weight_init[0],
50  [],
51  self.w,
52  shape=[output_dims, input_dims],
53  **weight_init[1]
54  ),
55  optimizer=weight_optim))
56  self.params.append(
57  LayerParameter(
58  parameter=self.b,
59  initializer=core.CreateOperator(bias_init[0],
60  [],
61  self.b,
62  shape=[output_dims, ],
63  **bias_init[1]
64  ),
65  optimizer=bias_optim))
66 
67  def _add_ops(self, net, params):
68  net.FC(self.input_record.field_blobs() + params,
69  self.output_schema.field_blobs(), **self.kwargs)
70 
71  @property
72  def param_blobs(self):
73  return [self.w, self.b]
def input_record(self)
Definition: layers.py:149
output_schema
Definition: fc.py:32
def CreateOperator(operator_type, inputs, outputs, name='', control_input=None, device_option=None, arg=None, engine=None, kwargs)
Definition: core.py:259