time | Calls | line |
---|
| | 1 | function [net, f, grad] = fungrad_minibatch(prob, param, model, net, task)
|
| | 2 |
|
< 0.001 | 11 | 3 | if ~any(strcmp(task, {'funonly', 'fungrad'}))
|
| | 4 | error('Unknown task.');
|
< 0.001 | 11 | 5 | end
|
| | 6 |
|
< 0.001 | 11 | 7 | grad = [];
|
< 0.001 | 11 | 8 | if strcmp(task, 'fungrad')
|
< 0.001 | 6 | 9 | for m = 1 : model.L
|
0.008 | 24 | 10 | grad.dfdW{m} = gpu(@zeros,size(model.weight{m}));
|
0.005 | 24 | 11 | grad.dfdb{m} = gpu(@zeros,size(model.bias{m}));
|
< 0.001 | 24 | 12 | end
|
< 0.001 | 11 | 13 | end
|
| | 14 |
|
< 0.001 | 11 | 15 | f = 0;
|
< 0.001 | 11 | 16 | bsize = param.bsize;
|
0.001 | 11 | 17 | for i = 1 : ceil(prob.l/bsize)
|
0.011 | 649 | 18 | range = (i-1)*bsize + 1 : min(prob.l, i*bsize);
|
1547.278 | 649 | 19 | [net, loss] = lossgrad_subset(prob, model, net, range, task);
|
| | 20 |
|
< 0.001 | 649 | 21 | f = f + loss;
|
| | 22 |
|
0.009 | 649 | 23 | if strcmp(task, 'fungrad')
|
0.002 | 354 | 24 | for m = 1 : model.L
|
0.095 | 1416 | 25 | grad.dfdW{m} = grad.dfdW{m} + net.dlossdW{m};
|
0.023 | 1416 | 26 | grad.dfdb{m} = grad.dfdb{m} + net.dlossdb{m};
|
< 0.001 | 1416 | 27 | end
|
< 0.001 | 649 | 28 | end
|
0.003 | 649 | 29 | end
|
| | 30 |
|
| | 31 | % Obj function value and gradient vector
|
< 0.001 | 11 | 32 | reg = 0.0;
|
0.002 | 11 | 33 | for m = 1 : model.L
|
0.006 | 44 | 34 | reg = reg + norm(model.weight{m}, 'fro')^2 + norm(model.bias{m})^2;
|
0.001 | 44 | 35 | if strcmp(task, 'fungrad')
|
0.008 | 24 | 36 | grad.dfdW{m} = model.weight{m}/param.C + grad.dfdW{m}/prob.l;
|
0.004 | 24 | 37 | grad.dfdb{m} = model.bias{m}/param.C + grad.dfdb{m}/prob.l;
|
< 0.001 | 44 | 38 | end
|
< 0.001 | 44 | 39 | end
|
0.002 | 11 | 40 | f = (1.0/(2*param.C))*reg + f/prob.l;
|
Other subfunctions in this file are not included in this listing.