Question
I am trying to use an "activations" function on a pretrained googlenet network. It runs ok, but returns a 4-D matrix. So I tried using ('OutputAs', 'columns') Name-Value pair. But this produces an error. Here are the reproduction steps and the error message: net = googlenet; mockImage = randn(224, 224, 3); layer = 'loss3-classifier'; trainingFeatures = activations(net, mockImage, layer, 'OutputAs', 'columns'); Error using DAGNetwork>iParseAndValidateActivationsNameValuePairs (line 598) 'OutputAs' is not a recognized parameter. For a list of valid name-value pair arguments, see the documentation for this function. Error in DAGNetwork/activations (line 230) [miniBatchSize, executionEnvironment] = iParseAndValidateActivationsNameValuePairs(varargin{:}); Error in reproduce_OutputAs_error (line 4) trainingFeatures = activations(net, mockImage, layer, 'OutputAs', 'columns'); How can I get the activations in a correct format from googlenet? The reason I am trying to do this, is to follow feature extraction example, https://www.mathworks.com/help/nnet/examples/feature-extraction-using-alexnet.html, using googlenet instead of alexnet.
Related Questions
Expert Answer
Kshitij Singh
PhD Expert
Answered Aug 18, 2026
The pretrained networks "alexnet" and "googlenet" belong to different MATLAB classes: "alexnet" is a SeriesNetwork, while "googlenet" is a DAGNetwork (where layers do not have to be arranged as one single chain). For a DAGNetwork, the "activations" method is not fully supported yet – this functionality will be available in a future MATLAB release.
But as you found out, the "activations" method does work on a "googlenet" to some extent. It returns a _h_-by-_w_-by-_c_-by-_n_ array, where _h_, _w_, and _c_ are the height, width, and number of channels for the output of the chosen layer, and _n_ is the number of observations.
The workaround is to reshape the matrix to be in the form of (number of observations) x (number of features) as is needed for "fitcecoc" for feature extraction. Here (number of features) = h*w*c. You should be able to reshape the training and testing matrices as follows:
>> nfeatures = size(trainingFeatures, 1) * size(trainingFeatures, 2) * size(trainingFeatures, 3); >> nobservations = size(trainingFeatures, 4); >> trainingFeatures = reshape(trainingFeatures, nfeatures, nobservations); >> trainingFeatures = trainingFeatures';
Have a different question? Ask here