function
    net = get_net(varargin) % net = get_net(model_file, phase_name) or
    % net = get_net(model_file, weights_file, phase_name) %
    Construct a net from model_file,
    and load weights from weights_file % phase_name can only be 'train' or
    'test'

    CHECK(
        nargin == 2 || nargin == 3,
        ['usage: ' ... 'net = get_net(model_file, phase_name) or ' ... 'net = get_net(model_file, weights_file, phase_name)']);
if
  nargin == 3 model_file = varargin{1};
weights_file = varargin{2};
phase_name = varargin{3};
elseif nargin == 2 model_file = varargin{1};
phase_name = varargin{2};
end

    CHECK(ischar(model_file), 'model_file must be a string');
CHECK(ischar(phase_name), 'phase_name must be a string');
CHECK_FILE_EXIST(model_file);
CHECK(strcmp(phase_name, 'train') || strcmp(phase_name, 'test'),
      ... sprintf('phase_name can only be %strain%s or %stest%s',
                  ... char(39),
                  char(39),
                  char(39),
                  char(39)));

% construct caffe net from model_file hNet =
    caffe_('get_net', model_file, phase_name);
net = caffe.Net(hNet);

% load weights from weights_file if nargin ==
    3 CHECK(ischar(weights_file), 'weights_file must be a string');
CHECK_FILE_EXIST(weights_file);
net.copy_from(weights_file);
end

    end
