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

📄 spatialmap.java

📁 一个纯java写的神经网络源代码
💻 JAVA
字号:
/* * SpatialMap.java * */package org.joone.engine;/** <P>SpatialMap is intended to be an abstract spatial map for use with a * GaussianLayer.  Custom SpatialMap's need to extend the ApplyNeighborhood method * and implement it based on their own spatial shape implementation.   * The Gaussian spatial size is updated if the current epoch is less than the ordering phase,  * it is also reduced over the ordering phase based on the time constant.</P> */public abstract class SpatialMap implements java.io.Serializable {        private double InitialGaussianSize = 1; // The initial Gaussian size.        private double CurrentGaussianSize = 1; // The current Gaussian size.        private int map_width = 1;  // Width of map.    private int map_height = 1; // Height of map.    private int map_depth = 1;  // Depth of the map.        private int win_x = 0, win_y = 0, win_z= 0; // The winning neuron.        private int TotalEpochs = 1;    private int orderingPhase;        // TimeConstant    double TimeConstant = 1;        /** <P>Initialises this spatial map according to the total number of     * epochs/cycles.</P>     * @param total_epochs The total number of epochs that will be used.     */        public final void init(int total_epochs) {//        TimeConstant = total_epochs / Math.log(getInitialGaussianSize());//        TotalEpochs = total_epochs;        updateCurrentGaussianSize(1);    }        /** <P>Gets the total number of epochs for the current session.</P>     * @return The total number of epochs for the current session.     */        public final int getTotalEpochs() {        return(TotalEpochs);    }        /** <P>Sets the initial guassian size of the spatial neighborhood.</P>     * @param size The size of the neighborhood.     */    public final void setInitialGaussianSize(double size) {        setCurrentGaussianSize(size);        InitialGaussianSize = size;    }        /** <P>Gets the size of the spatial neighborhood.</P>     * @return The size of the spatial neighborhood.     */    public final double getInitialGaussianSize() {        return(InitialGaussianSize);    }        /** <P>Sets the current guassian size of the spatial neighborhood.</P>     * @param size The current guassian size of the spatial neighborhood.     */    public final void setCurrentGaussianSize(double size) {        CurrentGaussianSize = size;    }        /** <P>Gets the current gaussian size of the spatial neighborhood.</P>     * @return The current gaussian size of the spatial neighborhood.     */    public final double getCurrentGaussianSize() {        return(CurrentGaussianSize);    }        /** <P>Updates the current Gaussian Size depending on the current epoch and the time     * constant.</P>     * @param current_epoch The current epoch or cycle.     */    public final void updateCurrentGaussianSize(int current_epoch) {        if (current_epoch < getOrderingPhase())            setCurrentGaussianSize( getInitialGaussianSize() * Math.exp(-(current_epoch/getTimeConstant())) );        else            setCurrentGaussianSize(0.01);    }        /** <P>Applies the neighborhood strategy based on this spatial maps     * implementation.</P>     * @param distances The euclidean distances between input and weights calculated by previous     * synapse.     * @param n_outs The outputs of this spatial maps neighborhood strategy.     * @param isLearning Is the network in the learning phase.     */        abstract public void ApplyNeighborhoodFunction(double [] distances, double [] n_outs, boolean isLearning);        /** Extracts the X,Y,Z co-ordinates of the winning neuron in this spatial map.  The co-ordinates are placed into     * internal variables,  Co-ordinates can be accessed by using the getWinnerX() , getWinnerY() , getWinnerZ() methods.     * A neuron is considered the winner if it's distance between the input and weights vector is the smallest.     * @param distances The distances between the input and weights vector, this should be passed in by the     * previous synapse.     */    protected final void extractWinner(double [] distances) {        int current_output = 0;        double curDist = 0f;        double bestDist = 999999999999999f;        for (int z=0;z<getMapDepth();z++){            for (int y=0; y<getMapHeight(); y++) {                for (int x=0; x<getMapWidth(); x++) {                    current_output = x+(y* getMapWidth())+(z*( getMapWidth()*getMapHeight()));                    curDist = distances[current_output];                    if ( curDist < bestDist ) {                        bestDist = curDist;                        win_x = x;                        win_y = y;                        win_z = z;                    }                }            }        }    }        /** <P>Returns the X Co-ordinate of the current winning neuron.</P>     * @return The X Co-ordinate of the current winning neuron.     */    protected final int getWinnerX() {        return(win_x);    }        /** <P>Returns the Y Co-ordinate of the current winning neuron.</P>     * @return The Y Co-ordinate of the current winning neuron.     */    protected final int getWinnerY() {        return(win_y);    }        /** <P>Returns the Z Co-ordinate of the current winning neuron.</P>     * @return The Z Co-ordinate of the current winning neuron.     */    protected final int getWinnerZ() {        return(win_z);    }        /** <P>Sets the dimensions of the spatial map.  Allows dimension setting in one     * call.</P>     * @param x The x size or width of the map.     * @param y The y size or height of the map.     * @param z The z size of depth of the map.     */    public final void setMapDimensions(int x,int y,int z) {        setMapWidth(x);        setMapHeight(y);        setMapDepth(z);    }        /** Sets the width of this spatial map.     * @param w The width or x size of the map.     */    public final void setMapWidth(int w) {        if ( w> 0)            map_width = w;        else map_width=1;    }        /** Sets the height of this spatial map.     * @param h The height or y size of the map.     */    public final void setMapHeight(int h) {        if ( h>0)            map_height=h;        else map_height=1;    }        /** Sets the depth of this spatial map.     * @param d The depth or z size of the map.     */    public final void setMapDepth(int d) {        if ( d>0)            map_depth = d;        else map_depth=1;    }        /** <P>Gets the width of this spatial map.</P>     * @return The width of this spatial map.     */    public final int getMapWidth() {        return(map_width);    }        /** <P>Gets the height of this spatial map.</P>     * @return The height of this spatial map.     */    public final int getMapHeight() {        return(map_height);    }        /** <P>Gets the depth of this spatial map.</P>     * @return The depth of this spatial map.     */    public final int getMapDepth() {        return(map_depth);    }        /** <P>Calculates the squared distance between vector (x1,y1,z1) and (x2,y2,z2) and returns the     * result.</P>     * @return The squared distance between vector (x1,y1,z1) and (x2,y2,z2)     * @param x1 The x location of the first vector.     * @param y1 The y location of the first vector.     * @param z1 The z location of the first vector.     * @param x2 The x location of the second vector.     * @param y2 The y location of the second vector.     * @param z2 The z location of the second vector.     */    protected final double distanceBetween(int x1,int y1,int z1,int x2,int y2,int z2) {        int xleg=0,yleg=0,zleg=0;        xleg = (x1-x2);        xleg *= xleg;        yleg = (y1-y2);        yleg *= yleg;        zleg = (z1-z2);        zleg*=zleg;        return( xleg + yleg + zleg);    }        /** 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;    }        /** 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;    }    }

⌨️ 快捷键说明

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