106 lines
3.3 KiB
Java
106 lines
3.3 KiB
Java
|
/*******************************************************************************
|
||
|
* Copyright (c) 2015-2018 Skymind, Inc.
|
||
|
*
|
||
|
* This program and the accompanying materials are made available under the
|
||
|
* terms of the Apache License, Version 2.0 which is available at
|
||
|
* https://www.apache.org/licenses/LICENSE-2.0.
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||
|
* License for the specific language governing permissions and limitations
|
||
|
* under the License.
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
******************************************************************************/
|
||
|
|
||
|
package org.deeplearning4j.nn.layers;
|
||
|
|
||
|
import org.deeplearning4j.nn.api.Layer;
|
||
|
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
|
||
|
import org.deeplearning4j.nn.gradient.DefaultGradient;
|
||
|
import org.deeplearning4j.nn.gradient.Gradient;
|
||
|
import org.nd4j.linalg.api.buffer.DataType;
|
||
|
import org.nd4j.linalg.api.ndarray.INDArray;
|
||
|
import org.nd4j.linalg.primitives.Pair;
|
||
|
import org.deeplearning4j.nn.workspace.ArrayType;
|
||
|
import org.deeplearning4j.nn.workspace.LayerWorkspaceMgr;
|
||
|
|
||
|
/**
|
||
|
* Created by davekale on 12/7/16.
|
||
|
*/
|
||
|
public class DropoutLayer extends BaseLayer<org.deeplearning4j.nn.conf.layers.DropoutLayer> {
|
||
|
|
||
|
public DropoutLayer(NeuralNetConfiguration conf, DataType dataType) {
|
||
|
super(conf, dataType);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public double calcRegularizationScore(boolean backpropParamsOnly){
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Type type() {
|
||
|
return Type.FEED_FORWARD;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void fit(INDArray input, LayerWorkspaceMgr workspaceMgr) {
|
||
|
throw new UnsupportedOperationException("Not supported");
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Pair<Gradient, INDArray> backpropGradient(INDArray epsilon, LayerWorkspaceMgr workspaceMgr) {
|
||
|
INDArray delta = workspaceMgr.dup(ArrayType.ACTIVATION_GRAD, epsilon);
|
||
|
|
||
|
if (maskArray != null) {
|
||
|
delta.muliColumnVector(maskArray);
|
||
|
}
|
||
|
|
||
|
Gradient ret = new DefaultGradient();
|
||
|
delta = backpropDropOutIfPresent(delta);
|
||
|
return new Pair<>(ret, delta);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public INDArray activate(boolean training, LayerWorkspaceMgr workspaceMgr) {
|
||
|
assertInputSet(false);
|
||
|
|
||
|
INDArray ret;
|
||
|
if(!training){
|
||
|
ret = input;
|
||
|
} else {
|
||
|
if(layerConf().getIDropout() != null){
|
||
|
INDArray result;
|
||
|
if(inputModificationAllowed){
|
||
|
result = input;
|
||
|
} else {
|
||
|
result = workspaceMgr.createUninitialized(ArrayType.INPUT, input.dataType(), input.shape(), input.ordering());
|
||
|
}
|
||
|
|
||
|
ret = layerConf().getIDropout().applyDropout(input, result, getIterationCount(), getEpochCount(), workspaceMgr);
|
||
|
} else {
|
||
|
ret = workspaceMgr.leverageTo(ArrayType.ACTIVATIONS, input);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (maskArray != null) {
|
||
|
ret.muliColumnVector(maskArray);
|
||
|
}
|
||
|
|
||
|
ret = workspaceMgr.leverageTo(ArrayType.ACTIVATIONS, ret);
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean isPretrainLayer() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public INDArray params() {
|
||
|
return null;
|
||
|
}
|
||
|
}
|