⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gaussianlayer.java

📁 一个纯java写的神经网络源代码
💻 JAVA
字号:
package org.joone.engine;import java.util.ArrayList;import java.util.Collection;import org.joone.exception.JooneRuntimeException;import org.joone.log.*;import java.util.TreeSet;import org.joone.inspection.implementations.BiasInspection;import org.joone.net.NetCheck;/** <P>This layer implements the Gaussian Neighborhood SOM strategy.  It receives * the euclidean distances between the input vector and weights and calculates the * distance fall off between the winning node and all other nodes.  These are * passed back allowing the previous synapse to adjust it's weights.</P> * <P>The distance fall off is calculated according to a Gaussian distribution from * the winning node.  This layer uses implemtations of SpatialMap in order to * calculate these distances.  Currently this layer uses the GaussianSpatialMap * which calculates the Gaussian distance for all nodes in the SOM map.  Future * maps will allow distance calculations based on a specific shape such as a circle * , square or diamond.  Currently the GuassianLayer supports 3D SOM maps.</P> * @see SimpleLayer parent */public class GaussianLayer extends SimpleLayer implements NeuralNetListener {    private static final ILogger log = LoggerFactory.getLogger (GaussianLayer.class);    private static final long serialVersionUID = -941653911909171430L;        // Width of the map in the this layer.    private int LayerWidth = 1;    // Height of the map in the this layer.    private int LayerHeight = 1;    // Depth of the map in the this layer.    private int LayerDepth = 1;             private SpatialMap space_map;    private double timeConstant = 200.0;    private int orderingPhase = 1000;    private double initialGaussianSize = 10;    /** <P>The default constructor for this GaussianLayer.</P> */        public GaussianLayer() {        super();    }    /** The constructor that takes a name of the layer.     * @param ElemName The name of the Layer     */        public GaussianLayer(java.lang.String ElemName) {        super(ElemName);    }        /** <P>This method has a blank body as there are no biases to adjust.</P>     * @param pattern Not used. The pattern to process and pass back.     * @throws JooneRuntimeException The run time exception.     */    public void backward(double[] pattern)         throws JooneRuntimeException            {     }        /** <P>This method takes as input an array of euclidean distances between the input and     * weights calculated by the previous synapse.  This method calculates the Gaussian     * distance fall off between the winning neuron and all other nodes.  These distances are passed on to the next synapse.</P>     * @param pattern The pattern containing the euclidean distances from the previous synapse.     * @see NeuralLayer#forward (double[])     * @throws JooneRuntimeException This <code>Exception </code> is  a wrapper Exception when an Exception is thrown     *                               while doing the maths.     */    public void forward (double[] pattern)         throws JooneRuntimeException           {        try        {            getSpace_map().ApplyNeighborhoodFunction(pattern,outs, getMonitor().isLearning());        }        catch (Exception aioobe)         {            String msg;            log.error ( msg = "Exception thrown while processing the pattern " + pattern.toString()                        + " Exception thrown is " + aioobe.getClass ().getName () + ". Message is " + aioobe.getMessage() );            throw new JooneRuntimeException (msg, aioobe);            //aioobe.printStackTrace();         }    }        /** Getter for property LayerDepth.     * @return Value of property LayerDepth.     *     */    public int getLayerDepth() {        return LayerDepth;    }        /** Setter for property LayerDepth.     * @param layerDepth New value of property LayerDepth.     *     */    public void setLayerDepth(int layerDepth) {        if ( layerDepth != getLayerDepth() )        {            this.LayerDepth = layerDepth;            setRows(getLayerWidth()*getLayerHeight()*getLayerDepth());            setDimensions();            setConnDimensions();            getSpace_map().setMapDepth(layerDepth);        }    }        /** Getter for property LayerHeight.     * @return Value of property LayerHeight.     *     */    public int getLayerHeight() {        return LayerHeight;    }        /** Setter for property LayerHeight.     * @param LayerHeight New value of property LayerHeight.     *     */    public void setLayerHeight(int LayerHeight) {        if ( LayerHeight != getLayerHeight() )        {            this.LayerHeight = LayerHeight;            setRows(getLayerWidth()*getLayerHeight()*getLayerDepth());            setDimensions();            setConnDimensions();            getSpace_map().setMapHeight(LayerHeight);        }    }        /** Getter for property LayerWidth.     * @return Value of property LayerWidth.     *     */    public int getLayerWidth() {        return LayerWidth;    }        /** Setter for property LayerWidth.     * @param LayerWidth New value of property LayerWidth.     *     */    public void setLayerWidth(int LayerWidth) {        if ( LayerWidth != getLayerWidth() )        {            this.LayerWidth = LayerWidth;            setRows(getLayerWidth()*getLayerHeight()*getLayerDepth());            setDimensions();            setConnDimensions();            getSpace_map().setMapWidth(LayerWidth);        }    }    /** Gets the largest layer dimension size.     * @return The size of the largest dimension, width , height or depth.     */    public int getLargestDimension()    {        int max = 1;        if ( getLayerWidth() > max)            max = getLayerWidth();        if ( getLayerHeight() > max)            max = getLayerHeight();        if ( getLayerDepth() > max)            max = getLayerDepth();                return(max);    }        /** <P>Check that there are no errors or problems with the properties of this     * GaussianLayer.</P>     * @return The TreeSet of errors / problems if any.     */    public TreeSet check() {        TreeSet checks = super.check();                if ( getLayerWidth() < 1 )            checks.add(new NetCheck(NetCheck.FATAL, "Layer width should be greater than or equal to 1." , this));        if ( getLayerHeight() < 1 )            checks.add(new NetCheck(NetCheck.FATAL, "Layer height should be greater than or equal to 1." , this));                if ( getLayerDepth() < 1 )            checks.add(new NetCheck(NetCheck.FATAL, "Layer depth should be greater than or equal to 1." , this));                if (getOrderingPhase() > getMonitor().getTotCicles())            checks.add(new NetCheck(NetCheck.WARNING, "Ordering phase should be lesser than or equal to the number of epochs" , this));        return checks;    }    public void start() {        if (getMonitor() != null) {            getMonitor().addNeuralNetListener(this, false);        }        super.start();    }        /** <P>Initialises the time constant used to decrease the size of the spatial     * map.</P>     * @param e The original Net Event.     */    public void netStarted(NeuralNetEvent e) {        getSpace_map().init( getMonitor().getTotCicles());        space_map.setInitialGaussianSize(getLargestDimension());    }        /** <P>Updates the Gaussian Size if in learning mode.</P>     * @param e The original Net Event.     */    public void cicleTerminated(NeuralNetEvent e) {        if ( getMonitor().isLearning() )        {           getSpace_map().updateCurrentGaussianSize(getMonitor().getTotCicles()-getMonitor().getCurrentCicle());         }    }            /** Getter for property orderingPhase.     * @return Value of property orderingPhase.     *     */    public int getOrderingPhase() {        return orderingPhase;    }        /** Setter for property orderingPhase.     * @param orderingPhase New value of property orderingPhase.     *     */    public void setOrderingPhase(int orderingPhase) {        this.orderingPhase = orderingPhase;        getSpace_map().setOrderingPhase(orderingPhase);    }        /** Getter for property timeConstant.     * @return Value of property timeConstant.     *     */    public double getTimeConstant() {        return timeConstant;    }        /** Setter for property timeConstant.     * @param timeConstant New value of property timeConstant.     *     */    public void setTimeConstant(double timeConstant) {        this.timeConstant = timeConstant;        getSpace_map().setTimeConstant(timeConstant);    }        /** Getter for property space_map.     * @return Value of property space_map.     *     */    protected org.joone.engine.SpatialMap getSpace_map() {        if (space_map == null) {            space_map = new GaussianSpatialMap();            space_map.setMapDepth(getLayerDepth());            space_map.setMapHeight(getLayerHeight());            space_map.setMapWidth(getLayerWidth());            space_map.setInitialGaussianSize(getInitialGaussianSize());            space_map.setOrderingPhase(getOrderingPhase());            space_map.setTimeConstant(getTimeConstant());    }        return space_map;    }            /** Getter for property initialGaussianSize.     * @return Value of property initialGaussianSize.     *     */    public double getInitialGaussianSize() {        return initialGaussianSize;    }        /** Setter for property initialGaussianSize.     * @param initialGaussianSize New value of property initialGaussianSize.     *     */    public void setInitialGaussianSize(double initialGaussianSize) {        this.initialGaussianSize = initialGaussianSize;        getSpace_map().setInitialGaussianSize(initialGaussianSize);    }    /**     * It doesn't make sense to return biases for this layer     * @return null     */    public Collection Inspections() {        Collection col = new ArrayList();        col.add(new BiasInspection(null));        return col;    }    public void netStoppedError(NeuralNetEvent e, String error) {    }    public void errorChanged(NeuralNetEvent e) {    }    public void netStopped(NeuralNetEvent e) {    }        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -