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

📄 streamoutputsynapse.java

📁 一个纯java写的神经网络源代码
💻 JAVA
字号:
package org.joone.io;import java.util.*;import org.joone.engine.*;import org.joone.util.*;import org.joone.log.*;public abstract class StreamOutputSynapse extends Synapse implements PlugInListener {    /**     * Logger     * */    private static final ILogger log = LoggerFactory.getLogger(StreamOutputSynapse.class);    private char separator = ';';        private static final long serialVersionUID = 7344684413113722785L;    // The FIFO used for buffering    protected transient Fifo fifo;    // Are we buffering the output.  Can be used for OutputConverters that need all data in order to convert or if a buffer is required.    // Buffer = true means store all the data then write in one go.    private boolean buffered = true;    // If we are using buffered mode then this will hold the buffered patterns.    private transient Vector buffered_patterns;    // Support for Output Conversion    protected OutputConverterPlugIn nextPlugIn = null;        public StreamOutputSynapse() {        super();    }    protected void backward(double[] pattern) {        // Non usato.    }        protected void forward(double[] pattern) {        outs = pattern;    }        /**     * The standard fwdPut method.  This method performs buffering of pattern data if required according to the buffered flag.     * If buffered mode is set then the default multiple writing method write(Pattern [] patterns) method is called to loop through all     * the patterns calling the single pattern writing abstract method write(Pattern pattern) to write the pattern to the appropriate media.     * If the synapse is not in buffered mode then the  pattern is simply passed to the single pattern writing abstract     * method write(Pattern pattern) to write the pattern to the appropriate media.     *     * Custom xxxOutputSynapse classes can over ride this method if they would like to perform a custom buffering implementation.     * In this case it will be the responsiblity of the custom class to ensure all patterns are output correctly and any conversion is done     * prior to writing data.     */    public synchronized void fwdPut(Pattern pattern) {                if (isEnabled()) { // Check that this synapse is enabled or not            try {                if ( isBuffered() )  // Check if it's using buffered mode or not                {                    if ( pattern.getCount() > -1)  // If we still going through patterns then simply add them to the fifo                    {                        // Push Pattern onto buffered FIFO.                        m_pattern = pattern;                        inps = (double[]) pattern.getArray();                        forward(inps);                        m_pattern.setArray(outs);                        getFifo().push(m_pattern.clone());                        items = fifo.size();                    }                    else  // Otherwise we have finished so convert all patterns                    {                        // We've come to the end so write do any buffer conversion (if applicable)  and output the data                        // Some xxxOutputSynapse might need to know they are on the last pattern so also add the count=-1 pattern.                        //m_pattern = pattern;                        //inps = (double[]) pattern.getArray();                        //forward(inps);                        //m_pattern.setArray(outs);     // Don't foward if on a stop pattern                        getFifo().push(pattern.clone());                        items = fifo.size();                                                int num_patterns = fifo.size();                        buffered_patterns = new Vector();                        for ( int i = 0; i<num_patterns;i++) {                            buffered_patterns.addElement(((Pattern)fifo.pop()).clone());                        }                        // Conversion i.e unnormalizer would have to be done here.  ConverterPlugin.convert(buffered_patterns);                        // NOTE : Any Raw Data conversion i.e TextConverter will have to be called by the converting xxxOutputSynapse.                                                if ( nextPlugIn != null ){                            nextPlugIn.setInputVector(buffered_patterns);                            nextPlugIn.convertPatterns();                        }                        write(buffered_patterns);                    }                }                else // We are not in buffered mode so write the single pattern out                {                    // We are not in buffered mode so just write the pattern                    // Also need to do any non-buffered (if applicable) conversion here                    // Conversion i.e unnormalizer would have to be done here.  E.g ConverterPlugin.convert(pattern);                    // NOTE : Any Raw Data conversion i.e TextConverter will have to be called by the converting xxxOutputSynapse.                    // NOTE : Also the RawConverter has not yet been decided at the moment.                                        if ( pattern.getCount() > -1)  // Only foward and convert if not on a stop pattern                    {                        inps = (double[]) pattern.getArray();                        forward(inps);                        items=1;                                                if ( nextPlugIn != null ){                            nextPlugIn.setPattern(pattern);                            nextPlugIn.convertPattern();                        }                    }                    write(pattern);     // Write the pattern                } // End else not buffered            } catch (NumberFormatException nfe) {                String error = "NumberFormatException in "+getName()+". Message is : ";                log.warn(error + nfe.getMessage());                if ( getMonitor() != null )                    new NetErrorManager(getMonitor(),error + nfe.getMessage());            }                    } // End of if enabled                notifyAll();            } // End fwdPut method.        /**     * This function writes all of the buffered patterns to the appropriate media.  If required this function can be over written to allow     * custom output synapses greater control of the pattern writing.  This method is only used if the StreamOutputSynapse is buffered.     */    private void write(Vector patterns) {        if ( patterns != null ) {            for ( int i=0;i<patterns.size();i++)  // Loop through and write pattern                write((Pattern)patterns.elementAt(i));        }    }        /**     * Custom xxxOutputSynapses need to implement at least this method.  The custom synapse should write the pattern out to the     * appropriate media.  All patterns including the ending pattern with pattern.getCount()=-1 will be passed to this method so that     * custom output synapses can perform final processing.     */    public abstract void write(Pattern pattern);        /**     * Returns the column separator     * creation date: (23/04/00 0.50.18)     * @return char     */    public char getSeparator() {        return separator;    }    public synchronized Pattern revGet() {        // Non usato.        return null;    }    /**     * setArrays method comment.     */    protected void setArrays(int rows, int cols) {}    /**     * Dimensiona l'elemento     * @param int rows - righe     * @param int cols - colonne     */    protected void setDimensions(int rows, int cols)    {}    /**     * Inserire qui la descrizione del metodo.     * Data di creazione: (23/04/00 0.50.18)     * @param newSeparator char     */    public void setSeparator(char newSeparator) {        separator = newSeparator;    }        /**     * Sets the buffered status of this synapse.     */    public void setBuffered(boolean buf) {        buffered = buf;    }        /**     * Checks the buffered status of this synapse.     */    public boolean isBuffered() {        return(buffered);    }        public TreeSet check() {        TreeSet checks = super.check();                //checks.add(new NetCheck(NetCheck.ERROR, "File Name not set." , this));        // Call all OutputConverterPlugins here        if ( nextPlugIn != null ) {            nextPlugIn.check(checks); // Should propogate down the plugins        }        return checks;    }        /** Getter for property fifo.     * @return Value of property fifo.     *     */    protected Fifo getFifo() {        if (fifo == null)            fifo = new Fifo();        return fifo;    }        /**     * @return neural.engine.ConverterPlugIn     */    public OutputConverterPlugIn getPlugIn() {        return nextPlugIn;    }        /**     * Sets the plugin for the data postprocessing     * @param newPlugIn neural.engine.OutputConverterPlugIn     *     * @deprecated use {@link #addPlugIn(OutputConverterPlugIn)}     */    public boolean setPlugIn(OutputConverterPlugIn newPlugIn) {        if (newPlugIn == nextPlugIn)            return false;        if (newPlugIn == null)            nextPlugIn.setConnected(false);        else {            if (newPlugIn.isConnected())                return false;            newPlugIn.setConnected(true);            newPlugIn.addPlugInListener(this);            buffered = true;        }        nextPlugIn = newPlugIn;        getFifo().removeAllElements();        return true;    }        /**     * Adds a plug in to the stream output synapse for data preprocessing. If one      * or more plug ins are already added to the this synapse, the plug in will      * be added at the end of the list of plug ins.     *      * @param aNewPlugIn The new converter plug in to add (at the end of the list).     * @return <code>true</code> when the plug in is added, <code>false</code> when     * the plug in is not added, e.g. in case the plug in is already added /      * connected to another synapse.     */    public boolean addPlugIn(OutputConverterPlugIn aNewPlugIn) {        if(nextPlugIn == aNewPlugIn) {            return false;        }                // The null parameter is used to detach or delete a plugin        if(aNewPlugIn == null) {            // We need to declare the next plugin, if existing,            // as not more used, so it could be used again.            if (nextPlugIn != null) {                nextPlugIn.setConnected(false);            }            nextPlugIn = null;            getFifo().removeAllElements();            return true;        }                if(aNewPlugIn.isConnected()) {            // The new plugin is already connected to another plugin,            // hence cannot be used.            return false;        }                        if(nextPlugIn == null) {            aNewPlugIn.setConnected(true);            aNewPlugIn.addPlugInListener(this);            setBuffered(true);            nextPlugIn = aNewPlugIn;            getFifo().removeAllElements();            return true;        } else {            return nextPlugIn.addPlugIn(aNewPlugIn);        }          }        /**     * Removes (and disconnects) all (cascading) plug-ins.     */    public void removeAllPlugIns() {        if(nextPlugIn != null) {            nextPlugIn.setConnected(false);            nextPlugIn.removeAllPlugIns();            nextPlugIn = null;        }    }        public void dataChanged(PlugInEvent data) {        getFifo().removeAllElements();    }    }

⌨️ 快捷键说明

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