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

📄 multipleinputsynapse.java

📁 一个纯java写的神经网络源代码
💻 JAVA
字号:
/* * MultipleInputSynapse.java * * Created on 10 gennaio 2005, 21.23 */package org.joone.io;import java.io.IOException;import org.joone.engine.*;/** * This class reads sequentially all the connected input synapses, * in order to be able to use multiple sources as inputs. * It reads all the rows of the first input synapse, then all the * rows of the second one, and so on. The Stop Pattern is injected * only after the last row of the last input synapse is read. * * When this class is used, the monitor.trainingPatterns must be set * to the sum of the rows of all the attached input synapses. * * @author  P.Marrone */public class MultipleInputSynapse extends InputSwitchSynapse {    private int currentInput = 0;    private int currentPatt = 0;        /** Creates a new instance of MultipleInputSynapse */    public MultipleInputSynapse() {        super();    }        public Pattern fwdGet() {        super.setActiveSynapse((StreamInputSynapse)inputs.get(currentInput));        Pattern patt = super.fwdGet();        return elaboratePattern(patt);    }        public Pattern fwdGet(InputConnector conn) {        StreamInputSynapse myInput = null;                InputConnector myInputConnector;        Pattern myPattern;                // myFirstRow, myCurrentRow and myLastRow will hold the relative        // values of the input connector (which holds the absolute values )         // w.r.t. the input synpase holding the current row        int myFirstRow = conn.getFirstRow();        int myCurrentRow = conn.getCurrentRow();        int myLastRow = conn.getLastRow();        int myNumberOfPatterns;                        // search for the synpase holding the current row of the connector        for (int i=0; i < inputs.size(); ++i) {            myInput = (StreamInputSynapse)inputs.elementAt(i);            myNumberOfPatterns = getNumberOfPatterns(myInput);                        if(myFirstRow > myNumberOfPatterns) {                // current input synpase does not contain the first (and therefore,                // also not the current and last) row                myFirstRow -= myNumberOfPatterns;                myCurrentRow -= myNumberOfPatterns;                if(myLastRow > 0) {                    myLastRow -= myNumberOfPatterns;                }            } else {                // the current input synpase contains the first row                if(myCurrentRow > myNumberOfPatterns) {                    // the current input synpase does not contain the current row                    myFirstRow = 1;                    myCurrentRow -= myNumberOfPatterns;                    if(myLastRow > 0) {                        myLastRow -= myNumberOfPatterns;                    }                } else {                    // the current input synapse contains the current row                    if(myLastRow > myNumberOfPatterns) {                        // the current input synpase does not contain the last row                        myLastRow = 0;                    }                    // Synapse that contains the current row located. Create a new input                    // connector with the relative values for first, current and last row                    // w.r.t. the located input synpase.                    myInputConnector = new InputConnector();                    myInputConnector.setFirstRow(myFirstRow);                    myInputConnector.setCurrentRow(myCurrentRow);                    myInputConnector.setLastRow(myLastRow);                    setActiveSynapse(myInput);                    myPattern = super.fwdGet(myInputConnector);                    if(myPattern.getCount() != -1) {                        myPattern.setCount(conn.getCurrentRow() - conn.getFirstRow());                    }                    return myPattern;                }            }        }        return null;    }           /**     * Gets (finds out) how many patters an input synpase holds.     *     * @param anInputSynpase the number of patterns for this input synpase will be     * returned.     * @return the number of patterns the <code>anInputSynpase</code> holds.     */    protected int getNumberOfPatterns(StreamInputSynapse anInputSynpase) {        if(anInputSynpase.getLastRow() != 0) {            return anInputSynpase.getLastRow() - anInputSynpase.getFirstRow() + 1;        } else if(anInputSynpase.getInputVector().size() != 0) {            return anInputSynpase.getInputVector().size();        } else {            // this method is only called if an input connector is connector to this            // multiple input synpase. An input connector requires that its underlying            // input synpase operates in buffer mode. Therefore, to be sure, we turn on             // the buffermode if it is not on already...            if(!anInputSynpase.isBuffered()) {                anInputSynpase.setBuffered(true);            }            anInputSynpase.readAll();            return anInputSynpase.getInputVector().size();        }    }        private Pattern elaboratePattern(Pattern patt) {        int count = patt.getCount();        if (count == -1) {            currentInput = currentPatt = 0;        }        else {            patt.setCount(++currentPatt);            if (getActiveSynapse().isEOF()) {                // The current Input Synapse reached the EOF,                // then swicth to the next                ++currentInput;                if (currentInput == inputs.size()) {                    currentInput = currentPatt = 0; // Cycles if end of all the input synapses                }            }        }        return patt;    }        public void reset() {        super.reset();        currentInput = currentPatt = 0;    }        /**     * @param newBuffered boolean     */    public void setBuffered(boolean newBuffered) {        StreamInputSynapse myInput;            for (int i=0; i < inputs.size(); ++i) {            myInput = (StreamInputSynapse)inputs.elementAt(i);            myInput.setBuffered(newBuffered);        }    }        public void gotoLine(int aNumLine) throws IOException {        StreamInputSynapse myInput = null;        int myNumberOfPatterns;                for (int i=0; i < inputs.size(); ++i) {            myInput = (StreamInputSynapse)inputs.elementAt(i);            myNumberOfPatterns = getNumberOfPatterns(myInput);                        if(aNumLine < myNumberOfPatterns + myInput.getFirstRow() - 1) {                setActiveSynapse(myInput);                myInput.gotoLine(aNumLine);                return; // done            } else {                aNumLine -= myNumberOfPatterns;            }        }    }        public void setFirstRow(int newFirstRow) {        // It doesn't make much sense to change the first row of this multiple input synpase        // Control the first row either throught the underlying source or the 'above lying'         // input connector        throw new UnsupportedOperationException("Control the first row through the underlying source or any " +                "connected input connectors");    }        public void setLastRow(int newLastRow) {        throw new UnsupportedOperationException("Control the last row through the underlying source or any " +                "connected input connectors");    }}

⌨️ 快捷键说明

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