@Override public int numParams(boolean backprop) { return layerConf.getLayer().initializer().numParams(layerConf); }
@Override public int numParams(Layer layer) { FrozenLayer fl = (FrozenLayer) layer; ParamInitializer initializer = fl.getLayer().initializer(); return initializer.numParams(fl.getLayer()); }
@Override public void setBackpropGradientsViewArray(INDArray gradients) { if (this.params != null && gradients.length() != numParams()) { throw new IllegalArgumentException("Invalid input: expect gradients array of length " + numParams() + ", got gradient array of length of length " + gradients.length() + " " + layerId()); } this.gradientsFlattened = gradients; this.gradientViews = conf.getLayer().initializer().getGradientsFromFlattened(conf, gradients); }
@Override public void setBackpropGradientsViewArray(INDArray gradients) { if (this.params != null && gradients.length() != numParams()) throw new IllegalArgumentException("Invalid input: expect gradients array of length " + numParams(true) + ", got array of length " + gradients.length() + " - " + layerId()); this.gradientsFlattened = gradients; this.gradientViews = conf.getLayer().initializer().getGradientsFromFlattened(conf, gradients); }
@Override public Map<String, INDArray> init(NeuralNetConfiguration conf, INDArray paramsView, boolean initializeParams) { FrozenLayer fl = (FrozenLayer) conf.getLayer(); Layer innerLayer = fl.getLayer(); ParamInitializer initializer = innerLayer.initializer(); conf.setLayer(innerLayer); Map<String, INDArray> m = initializer.init(conf, paramsView, initializeParams); conf.setLayer(fl); return m; }
@Override public Map<String, INDArray> getGradientsFromFlattened(NeuralNetConfiguration conf, INDArray gradientView) { FrozenLayer fl = (FrozenLayer) conf.getLayer(); Layer innerLayer = fl.getLayer(); ParamInitializer initializer = innerLayer.initializer(); conf.setLayer(innerLayer); Map<String, INDArray> m = initializer.getGradientsFromFlattened(conf, gradientView); conf.setLayer(fl); return m; } }
finetuneConfiguration.appliedNeuralNetConfigurationBuilder().layer(layer).build(); int numParams = layer.initializer().numParams(layerConf); INDArray params; if (numParams > 0) {
BaseLayer bl = (BaseLayer) layer; activationFn = bl.getActivationFn().toString(); int nParams = layer.initializer().numParams(nnc); layerInfoRows.add(new String[] {i18N.getMessage("train.model.layerinfotable.layerNParams"), String.valueOf(nParams)});
BaseLayer bl = (BaseLayer) layer; activationFn = bl.getActivationFn().toString(); int nParams = layer.initializer().numParams(nnc); layerInfoRows.add(new String[] {i18N.getMessage("train.model.layerinfotable.layerNParams"), String.valueOf(nParams)});
BaseLayer bl = (BaseLayer) layer; activationFn = bl.getActivationFn().toString(); int nParams = layer.initializer().numParams(nnc); layerInfoRows.add(new String[] {i18N.getMessage("train.model.layerinfotable.layerNParams"), String.valueOf(nParams)});
private void nOutReplaceBuild(int layerNum, int nOut, Pair<WeightInit, Distribution> schemedist, Pair<WeightInit, Distribution> schemedistNext) { NeuralNetConfiguration layerConf = editedConfs.get(layerNum); Layer layerImpl = layerConf.getLayer(); //not a clone need to modify nOut in place FeedForwardLayer layerImplF = (FeedForwardLayer) layerImpl; layerImplF.setWeightInit(schemedist.getLeft()); layerImplF.setDist(schemedist.getRight()); layerImplF.setNOut(nOut); int numParams = layerImpl.initializer().numParams(layerConf); INDArray params = Nd4j.create(1, numParams); org.deeplearning4j.nn.api.Layer someLayer = layerImpl.instantiate(layerConf, null, 0, params, true); editedParams.set(layerNum, someLayer.params()); if (layerNum + 1 < editedConfs.size()) { layerConf = editedConfs.get(layerNum + 1); layerImpl = layerConf.getLayer(); //modify in place layerImplF = (FeedForwardLayer) layerImpl; layerImplF.setWeightInit(schemedistNext.getLeft()); layerImplF.setDist(schemedistNext.getRight()); layerImplF.setNIn(nOut); numParams = layerImpl.initializer().numParams(layerConf); if (numParams > 0) { params = Nd4j.create(1, numParams); someLayer = layerImpl.instantiate(layerConf, null, 0, params, true); editedParams.set(layerNum + 1, someLayer.params()); } } }
/** * This method: initializes the flattened gradients array (used in backprop) and sets the appropriate subset in all layers. * As a general rule, this shouldn't ever need to be called manually when doing training via fit(DataSet) or fit(DataSetIterator) */ public void initGradientsView() { try (MemoryWorkspace ws = Nd4j.getMemoryManager().scopeOutOfWorkspaces()) { if (layers == null) init(); int nLayers = layers.length; //First: Work out total length of params int paramLength = 0; int[] nParamsPerLayer = new int[nLayers]; for (int i = 0; i < nLayers; i++) { NeuralNetConfiguration conf = layerWiseConfigurations.getConf(i); nParamsPerLayer[i] = conf.getLayer().initializer().numParams(conf); paramLength += nParamsPerLayer[i]; } flattenedGradients = Nd4j.zeros(new int[] {1, paramLength}, 'f'); //No need to initialize, as each layer will do it each iteration anyway int backpropParamsSoFar = 0; for (int i = 0; i < layers.length; i++) { if (nParamsPerLayer[i] == 0) continue; //This layer doesn't have any parameters... INDArray thisLayerGradView = flattenedGradients.get(NDArrayIndex.point(0), NDArrayIndex.interval(backpropParamsSoFar, backpropParamsSoFar + nParamsPerLayer[i])); layers[i].setBackpropGradientsViewArray(thisLayerGradView); backpropParamsSoFar += nParamsPerLayer[i]; } } }
for (int i = 0; i < nLayers; i++) { NeuralNetConfiguration conf = layerWiseConfigurations.getConf(i); nParamsPerLayer[i] = conf.getLayer().initializer().numParams(conf); paramLength += nParamsPerLayer[i];