3 from __future__
import absolute_import
4 from __future__
import division
5 from __future__
import print_function
6 from __future__
import unicode_literals
17 def __init__(self, model, input_record, output_dims, weight_init=None,
18 bias_init=
None, weight_optim=
None, bias_optim=
None, name=
'fc',
19 weight_reg=
None, bias_reg=
None, **kwargs):
20 super(FC, self).__init__(model, name, input_record, **kwargs)
22 "Incorrect input type {}".format(input_record))
23 assert len(input_record.field_types()[0].shape) > 0, (
24 "FC expects limited dimensions of the input tensor")
26 input_dims = input_record.field_types()[0].shape[0]
27 assert input_dims > 0, (
28 "FC expects input dimensions > 0, got {}".format(input_dims))
30 scale = math.sqrt(1.0 / input_dims)
31 weight_init = weight_init
if weight_init
else (
32 'UniformFill', {
'min': -scale,
'max': scale})
33 bias_init = bias_init
if bias_init
else (
34 'UniformFill', {
'min': -scale,
'max': scale})
37 shape=[output_dims, input_dims],
38 initializer=weight_init,
39 optimizer=weight_optim,
40 regularizer=weight_reg)
43 shape=[output_dims, ],
44 initializer=bias_init,
49 (np.float32, (output_dims, )),
53 def _add_ops(self, net, params):
54 net.FC(self.input_record.field_blobs() + params,
55 self.output_schema.field_blobs(), **self.
kwargs)
58 def param_blobs(self):
59 return [self.
w, self.
b]
def get_next_blob_reference(self, name)
def create_param(self, param_name, shape, initializer, optimizer, ps_param=None, regularizer=None)