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

📄 fahlmanteachersynapse.java

📁 一个纯java写的神经网络源代码
💻 JAVA
字号:
/* * FahlmanTeacherSynapse.java * * Created on February 28, 2005, 1:55 PM */package org.joone.engine.learning;import org.joone.engine.Monitor;import org.joone.log.*;import org.joone.engine.listeners.*;/** * <p> * This class extends the normal Teacher synapse and implements the Fahlman * 40-20-40 criterion (the values can be changed). This teacher makes only sense * in case of binary outputs. * <p> * In case of the default values (40-20-40) and considering [0,1] binary outputs * the criterion is fullfilled if for all patterns the output is * - within [0, 0.4] in case the desired output is 0 * - within [0.6, 1] in case the desired output is 1. * <p> * More about this criterion can be found at  * {@link http://citeseer.ist.psu.edu/fahlman88empirical.html}. * * @author Boris Jansen */public class FahlmanTeacherSynapse extends TeacherSynapse {        /** Constant to indicate (key) the parameter for checking (in the monitor object)      * if the criterion has been forfilled or not. */    public static final String CRITERION = "FAHLMAN_CRITERION";        /**     * Logger     **/    protected static final ILogger log = LoggerFactory.getLogger(FahlmanTeacherSynapse.class);        /** The upperbit value (of the desired output), by default 1. */    private double upperBit = 1.0;        /** The lowerbit value (of the desired output), by default 0. */    private double lowerBit = 0.0;        /** The percentage that is considered as a lowerbit, by default 0.4.      * In case of desired output bits {0, 1} any output within [0, 0.4]     * is considered a lower bit     */    private double lowerBitPercentage = 0.4;        /** The percentage that is considered as a upperbit, by default 0.4.      * In case of desired output bits {0, 1} any output within [0.6, 1]     * is considered a upper bit     */    private double upperBitPercentage = 0.4;           /** Creates a new instance of FahlmanTeacherSynapse */    public FahlmanTeacherSynapse() {    }        /**     * Sets the upper bit.     *     * @param aValue sets the upper bit to <code>aValue</code>.     */    public void setUpperBit(double aValue) {        upperBit = aValue;    }        /**     * Gets the upper bit value.     *     * @return the upper bit value.     */    public double getUpperBit() {        return upperBit;    }        /**     * Sets the lower bit.     *     * @param aValue sets the lower bit to <code>aValue</code>.     */    public void setLowerBit(double aValue) {        lowerBit = aValue;    }        /**     * Gets the lower bit value.     *     * @return the lower bit value.     */    public double getLowerBit() {        return lowerBit;    }        /**     * Sets the upper bit percentage.     *     * @param aValue sets the upper bit percentage to <code>aValue</code>.     */    public void setUpperBitPercentage(double aValue) {        upperBitPercentage = aValue;    }        /**     * Gets the upper bit percentage.     *     * @return the upper bit percentage.     */    public double getUpperBitPercentage() {        return upperBitPercentage;    }        /**     * Sets the lower bit percentage.     *     * @param aValue sets the lower bit percentage to <code>aValue</code>.     */    public void setLowerBitPercentage(double aValue) {        lowerBitPercentage = aValue;    }        /**     * Gets the lower bit percentage.     *     * @return the lower bit percentage.     */    public double getLowerBitPercentage() {        return lowerBitPercentage;    }        protected double calculateError(double aDesired, double anOutput, int anIndex) {        if(getMonitor().isValidation()) {            double myRange = upperBit - lowerBit;            if(aDesired == lowerBit) {                myRange *= lowerBitPercentage;                if(!(anOutput >= lowerBit && anOutput <= lowerBit + myRange)) {                    getMonitor().setParam(CRITERION, Boolean.FALSE);                }            } else if(aDesired == upperBit) {                myRange *= upperBitPercentage;                if(!(anOutput >= upperBit - myRange && anOutput <= upperBit)) {                    getMonitor().setParam(CRITERION, Boolean.FALSE);                }            } else {                log.warn("The values for upper and/or lower bit are not correctly set. No match for desired output "                     + aDesired + ".");                getMonitor().setParam(CRITERION, Boolean.FALSE);            }        }                return super.calculateError(aDesired, anOutput, anIndex);    }   }

⌨️ 快捷键说明

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