| | |
| | |
| |
|
| |
|
| |
|
| |
|
| |
|
| | from caffe2.python import core, scope |
| | from caffe2.proto import caffe2_pb2 |
| |
|
| |
|
| | def _get_weights(model, namescope=None): |
| | if namescope is None: |
| | namescope = scope.CurrentNameScope() |
| |
|
| | if namescope == '': |
| | return model.weights[:] |
| | else: |
| | return [w for w in model.weights if w.GetNameScope() == namescope] |
| |
|
| |
|
| | def iter(model, blob_out, **kwargs): |
| | if 'device_option' in kwargs: |
| | del kwargs['device_option'] |
| | model.param_init_net.ConstantFill( |
| | [], |
| | blob_out, |
| | shape=[1], |
| | value=0, |
| | dtype=core.DataType.INT64, |
| | device_option=core.DeviceOption(caffe2_pb2.CPU, 0), |
| | **kwargs |
| | ) |
| | return model.net.Iter(blob_out, blob_out, **kwargs) |
| |
|
| |
|
| | def accuracy(model, blob_in, blob_out, **kwargs): |
| | dev = kwargs['device_option'] if 'device_option' in kwargs \ |
| | else scope.CurrentDeviceScope() |
| | is_cpu = dev is None or dev.device_type == caffe2_pb2.CPU |
| |
|
| | |
| | if not is_cpu and 'top_k' in kwargs and kwargs['top_k'] > 1: |
| | pred_host = model.net.CopyGPUToCPU(blob_in[0], blob_in[0] + "_host") |
| | label_host = model.net.CopyGPUToCPU(blob_in[1], blob_in[1] + "_host") |
| |
|
| | |
| | model.net.Accuracy( |
| | [pred_host, label_host], |
| | blob_out, |
| | device_option=core.DeviceOption(caffe2_pb2.CPU, 0), |
| | **kwargs |
| | ) |
| | else: |
| | model.net.Accuracy(blob_in, blob_out) |
| |
|
| |
|
| | def add_weight_decay(model, weight_decay): |
| | """Adds a decay to weights in the model. |
| | |
| | This is a form of L2 regularization. |
| | |
| | Args: |
| | weight_decay: strength of the regularization |
| | """ |
| | if weight_decay <= 0.0: |
| | return |
| | wd = model.param_init_net.ConstantFill( |
| | [], 'wd', shape=[1], value=weight_decay |
| | ) |
| | ONE = model.param_init_net.ConstantFill([], "ONE", shape=[1], value=1.0) |
| | for param in _get_weights(model): |
| | |
| | grad = model.param_to_grad[param] |
| | model.net.WeightedSum( |
| | [grad, ONE, param, wd], |
| | grad, |
| | ) |
| |
|