MATLAB Answers

Alla
0

Is it possible to initialize a conv2D layer with custom weights (from other layer for ex) ?

Asked by Alla
on 31 Jul 2019
Latest activity Edited by Alla
on 7 Aug 2019
I need to use weights from a different network conv layer to initialize another conv layer, the closest thing I could find was the custom initialization function but I'm still unsure if that is possible to do or not. Would the data returned by the training function be useable for something like this?
One more question, is there a way to access individual channels within a conv2d layer, I can set paramters for the whole layer, is it possible to do so for specefic channels, like set the learning factor to zero for one specefic filter?

  0 Comments

Sign in to comment.

1 Answer

Answer by Srivardhan Gadila on 6 Aug 2019
Edited by Srivardhan Gadila on 7 Aug 2019

Using weights of different network to the current network:
for 2 networks net1 & net2, copy the layers to some variable
layers = net1.Layers;
layers(net1layerindex).Weights(net1index) = net2.Layers(net2layerindex).Weights(net2index);
Let's say you want to set weights of a channel of a layer of a CNN to zeros(channelDimension)
layers(convLayerIndex).Weights(:,:,channelIndex) = zeros(channelDimension)
%also
layers(convLayerIndex).Weights(:,:,channelIndex,Index) = zeros(respectiveDimension)
Use the above layers to create a DAG or a Series network. You can also refer to the documentation of the assembleNetwork function which helps creating deep learning networks from layers without training.
I think setting the Learning factor for a specific filter is not possible but you can set it for the whole layer as follows:
layer.WeightLearnRateFactor = 0;

  3 Comments

Thanks for the suggestion but it seems that those properties ar eread-only, I get an error saying so when I try to set weights to zeros or assign weights from a different network, I've only tried it on DAG networks since that's what I'm using however, series could work.
I will check the assembleNetowrk more.
Thank you for the clarification, I actually did this as a way around the read-only problem, but when I get to the end, having a new set of layers initialized by the weights I need with specefic layers frozen, when I get there I still run into the problem of assembling a DAG netowrk since I need both a graph and a Connections file, and when I try to use the connections properties of my original DAG netowork I run into the same read-only problem. I can assemble a graph from the layers using the function layergraph but that one generates a Connections property that is not right (generates a series connection).
I even tried to manually change the connections but again they're read-only, it's starting to seem like these changes are not possible which is a shame,same for accessing individual channels, these changes would open the door for more under the hood tweaking that is necessary for research.

Sign in to comment.