/* * Encog(tm) Core v3.4 - Java Version * http://www.heatonresearch.com/encog/ * https://github.com/encog/encog-java-core * Copyright 2008-2016 Heaton Research, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://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. * * For more information on Heaton Research copyrights, licenses * and trademarks visit: * http://www.heatonresearch.com/copyright */ package org.encog.neural.flat; import org.encog.Encog; import org.encog.engine.network.activation.ActivationFunction; /** * Used to configure a flat layer. Flat layers are not kept by a Flat Network, * beyond setup. */ public class FlatLayer { /** * The activation function. */ private ActivationFunction activation; /** * The neuron count. */ private final int count; /** * The bias activation, usually 1 for bias or 0 for no bias. */ private double biasActivation; /** * The dropout rate */ private double dropoutRate; /** * The layer that feeds this layer's context. */ private FlatLayer contextFedBy; /** * Do not use this constructor. This was added to support serialization. */ public FlatLayer() { count = 0; } /** * Construct a flat layer. * * @param activation * The activation function. * @param count * The neuron count. * @param biasActivation * The bias activation. */ public FlatLayer(final ActivationFunction activation, final int count, final double biasActivation) { this(activation,count,biasActivation,0); } public FlatLayer(final ActivationFunction activation, final int count, final double biasActivation, double dropoutRate) { this.activation = activation; this.count = count; this.biasActivation = biasActivation; this.contextFedBy = null; this.dropoutRate = dropoutRate; } /** * @return the activation */ public ActivationFunction getActivation() { return this.activation; } /** * @return Get the bias activation. */ public double getBiasActivation() { if (hasBias()) { return this.biasActivation; } else { return 0; } } /** * @return The number of neurons our context is fed by. */ public int getContextCount() { if (this.contextFedBy == null) { return 0; } else { return this.contextFedBy.getCount(); } } /** * @return The layer that feeds this layer's context. */ public FlatLayer getContextFedBy() { return this.contextFedBy; } /** * @return the count */ public int getCount() { return this.count; } /** * @return The total number of neurons on this layer, includes context, bias * and regular. */ public int getTotalCount() { if (this.contextFedBy == null) { return getCount() + (hasBias() ? 1 : 0); } else { return getCount() + (hasBias() ? 1 : 0) + this.contextFedBy.getCount(); } } /** * @return the bias */ public boolean hasBias() { return Math.abs(this.biasActivation) > Encog.DEFAULT_DOUBLE_EQUAL; } /** * @param activation * the activation to set */ public void setActivation(final ActivationFunction activation) { this.activation = activation; } /** * Set the bias activation. * * @param a * The bias activation. */ public void setBiasActivation(final double a) { this.biasActivation = a; } /** * Set the layer that this layer's context is fed by. * * @param from * The layer feeding. */ public void setContextFedBy(final FlatLayer from) { this.contextFedBy = from; } /** * {@inheritDoc} */ @Override public String toString() { final StringBuilder result = new StringBuilder(); result.append("["); result.append(this.getClass().getSimpleName()); result.append(": count="); result.append(this.count); result.append(",bias="); if (hasBias()) { result.append(this.biasActivation); } else { result.append("false"); } if (this.contextFedBy != null) { result.append(",contextFed="); if (this.contextFedBy == this) { result.append("itself"); } else { result.append(this.contextFedBy); } } result.append("]"); return result.toString(); } public double getDropoutRate() { return dropoutRate; } public void setDropoutRate(double dropoutRate) { this.dropoutRate = dropoutRate; } }