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

📄 teachingsynapse.java

📁 一个纯java写的神经网络源代码
💻 JAVA
字号:
package org.joone.engine.learning;import java.util.Iterator;import org.joone.engine.*;import org.joone.io.*;import org.joone.net.NetCheck;import java.util.TreeSet;public class TeachingSynapse implements ComparingElement {    protected AbstractTeacherSynapse theTeacherSynapse;    private LinearLayer theLinearLayer;    private boolean enabled = true;    private boolean outputFull = false;        /** The teacher to use. If null a normal <code>TeacherSynapse</code> will be used.     * The moment the teacher (<code>theTeacherSynapse</code>) is initialized is done     * the first time <code>getTheTeacherSynapse()</code> method is called. At that     * moment we are also able to set the monitor object.     */    private AbstractTeacherSynapse theTeacherToUse = null;        /**     * @label desired     */    private StreamInputSynapse desired;    private Monitor monitor;    private String name;        private static final long serialVersionUID = -8893181016305737666L;        public TeachingSynapse() {    }        /**     * Creates a TeachingSynapse     *     * @param aTeacher the teacher to use. The default constructor     * (<code>TeachingSynapse()</code>) uses a normal <code>TeacherSynapse</code>.     */    public TeachingSynapse(TeacherSynapse aTeacher) {        theTeacherToUse = aTeacher;    }        public void fwdPut(Pattern pattern) {        Monitor mon = getMonitor();        // In interrogation mode, the Teacher must not be used        if (!mon.isLearning() && !mon.isValidation())            return;                if (!mon.isSingleThreadMode())             if (!getTheLinearLayer().isRunning())                getTheLinearLayer().start();        boolean firstTime = getTheTeacherSynapse().getSeenPatterns() == 0;        getTheTeacherSynapse().fwdPut(pattern);        if (mon.isSingleThreadMode()) {            if (pattern.getCount() == -1)                getTheLinearLayer().fwdRun(null);            if ((pattern.getCount() == 1) && !firstTime)                getTheLinearLayer().fwdRun(null);        }    }        /**     * Insert the method's description here.     * Creation date: (03/08/2000 22.50.55)     * @return java.lang.String     */    public StreamInputSynapse getDesired() {        return desired;    }        /**     * getInputDimension method comment.     */    public int getInputDimension() {        return getTheTeacherSynapse().getInputDimension();    }        /**     * Insert the method's description here.     * Creation date: (03/08/2000 22.54.48)     * @return neural.engine.Monitor     */    public Monitor getMonitor() {        return monitor;    }        /**     * @return neural.engine.LinearLayer     * changed to public for Save As XML     */    public LinearLayer getTheLinearLayer() {        if (theLinearLayer == null) {            theLinearLayer = new LinearLayer();            theLinearLayer.setLayerName("(R)MSE Layer");            if (monitor != null)                theLinearLayer.setMonitor(monitor);            theLinearLayer.setRows(1);            theLinearLayer.addInputSynapse(getTheTeacherSynapse());        }        return theLinearLayer;    }        /**     * @return neural.engine.TeacherSynapse     * changed to public for Save As XML     */    public AbstractTeacherSynapse getTheTeacherSynapse() {        if (theTeacherSynapse == null) {            if(theTeacherToUse != null) {                theTeacherSynapse = theTeacherToUse;            } else {                theTeacherSynapse = new TeacherSynapse();                theTeacherSynapse.setName("Teacher Synapse");            }            if (monitor != null) {                theTeacherSynapse.setMonitor(monitor);            }        }        return theTeacherSynapse;    }        public Pattern revGet() {        return getTheTeacherSynapse().revGet();    }        public boolean setDesired(StreamInputSynapse fn) {        desired = fn;        if (getTheTeacherSynapse().setDesired(fn)) {            if ((monitor != null) && (desired != null))                desired.setMonitor(monitor);            return true;        } else            return false;    }            public boolean addResultSynapse(OutputPatternListener listener) {        if (listener != null)            return getTheLinearLayer().addOutputSynapse(listener);        else            return false;    }        public void removeResultSynapse(OutputPatternListener listener) {        if (listener != null)            getTheLinearLayer().removeOutputSynapse(listener);    }        /**     * setInputDimension method.     */    public void setInputDimension(int newInputDimension) {        getTheTeacherSynapse().setInputDimension(newInputDimension);    }        /**     * Inserire qui la descrizione del metodo.     * Data di creazione: (06/04/00 23.33.24)     * @param newMonitor neural.engine.Monitor     */    public void setMonitor(Monitor newMonitor) {        monitor = newMonitor;        if (theTeacherSynapse != null)            theTeacherSynapse.setMonitor(newMonitor);        if (theLinearLayer != null)            theLinearLayer.setMonitor(newMonitor);        if (desired != null)            desired.setMonitor(newMonitor);    }            public void stop() {        getTheLinearLayer().stop();    }        public String getName() {        return name;    }        public void setName(java.lang.String newName) {        name = newName;    }        /**     * Recall phase     * @param pattern double[] - pattern di input sul quale applicare la funzione di trasferimento     */    protected void forward(double[] pattern) {        /* Not used */    }        /**     * Insert the method's description here.     * Creation date: (23/09/2000 12.52.58)     */    protected void setArrays(int rows, int cols) {        /* Not used */    }        /**     * @param int rows - righe     * @param int cols - colonne     */    protected void setDimensions(int rows, int cols) {        /* Not used */    }        /**     * Training phase.     * @param pattern double[] - input pattern     */    protected void backward(double[] pattern) {        /* Not used */    }        /**     * Needed for Save as XML     */    public void setTheTeacherSynapse(TeacherSynapse newTheTeacherSynapse) {        this.theTeacherSynapse = newTheTeacherSynapse;    }        /**     * Needed for Save as XML     */    public void setTheLinearLayer(LinearLayer newTheLinearLayer) {        this.theLinearLayer = newTheLinearLayer;    }        public void resetInput() {        getTheTeacherSynapse().resetInput();    }        public TreeSet check() {        // Prepare an empty set for check messages;        TreeSet checks = new TreeSet();                if (!isOutputFull())            checks.add(new NetCheck(NetCheck.FATAL, "the Teacher seems to be not attached", this));                if (theLinearLayer != null) {            checks.addAll(setErrorSource(theLinearLayer.check()));        }                if (theTeacherSynapse != null) {            checks.addAll(setErrorSource(theTeacherSynapse.check()));        }                return checks;    }        /** Getter for property enabled.     * @return Value of property enabled.     *     */    public boolean isEnabled() {        return enabled;    }        /** Setter for property enabled.     * @param enabled New value of property enabled.     *     */    public void setEnabled(boolean enabled) {        getTheTeacherSynapse().setEnabled(enabled);        this.enabled = enabled;    }        /** Getter for property outputFull.     * @return Value of property outputFull.     *     */    public boolean isOutputFull() {        return outputFull;    }        /** Setter for property outputFull.     * @param outputFull New value of property outputFull.     *     */    public void setOutputFull(boolean outputFull) {        this.outputFull = outputFull;    }        public void init() {        if (theTeacherSynapse != null) {            theTeacherSynapse.init();        }    }        // Changes the source of the errors generated from internal components    private TreeSet setErrorSource(TreeSet errors) {        if (!errors.isEmpty()) {            Iterator iter = errors.iterator();            while (iter.hasNext()) {                NetCheck nc = (NetCheck)iter.next();                if (!(nc.getSource() instanceof Monitor) &&                        !(nc.getSource() instanceof StreamInputSynapse) &&                        !(nc.getSource() instanceof StreamOutputSynapse))                    nc.setSource(this);            }        }        return errors;    }    }

⌨️ 快捷键说明

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