/*
 * ValidationSample.java
 *
 * Created on 11 november 2002, 22.59
 * @author  pmarrone
 */

package org.joone.samples.engine.scripting;

import org.joone.engine.*;
import org.joone.engine.learning.*;
import org.joone.net.*;
import org.joone.io.*;
import org.joone.util.*;
import java.io.*;

/**
 * This example shows how to use the joone's scripting engine to
 * to check the training level of the net using a validation
 * data source.
 * In this example we will learn to use the following objects:
 * - org.joone.util.LearningSwitch
 * - org.joone.util.MacroPlugin
 * - org.joone.util.NormalizerPlugIn
 *
 * This program shows how to build the same neural net contained into the
 * org/joone/samples/editor/scripting/ValidationSample.ser file using
 * only java code and the core engine's API. Open that net in
 * the GUI editor to see the architecture of the net built in this example.
 */
public class ScriptValidationSample {
    
    NeuralNet net;
    private static String filePath = "org/joone/samples/engine/scripting";
    /** Creates a new instance of SampleScript */
    public ScriptValidationSample() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        ScriptValidationSample sampleNet = new ScriptValidationSample();
        sampleNet.initialize(filePath);
        sampleNet.start();
    }
    
    private void initialize(String path) {
        /* Creates the three layers and connect them */
        LinearLayer ILayer = new LinearLayer();  // Input Layer
        SigmoidLayer HLayer = new SigmoidLayer(); // Hidden Layer
        SigmoidLayer OLayer = new SigmoidLayer(); // Output Layer
        ILayer.setRows(13); // The input pattern has 13 columns
        HLayer.setRows(4);
        OLayer.setRows(1);  // The desired pattern has 1 column
        FullSynapse synIH = new FullSynapse();
        FullSynapse synHO = new FullSynapse();
        this.connect(ILayer, synIH, HLayer);
        this.connect(HLayer, synHO, OLayer);
        
        /* Creates all the required input data sets */
        FileInputSynapse ITdata = this.createInput(path+"/wine.txt",1,2,14); /* The input training data set */
        FileInputSynapse IVdata = this.createInput(path+"/wine.txt",131,2,14); /* The input validation data set */
        FileInputSynapse DTdata = this.createInput(path+"/wine.txt",1,1,1); /* The desired training data set */
        FileInputSynapse DVdata = this.createInput(path+"/wine.txt",131,1,1); /* The desired validation data set */
        
        /* Creates and attach the input learning switch */
        LearningSwitch Ilsw = this.createSwitch(ITdata, IVdata);
        ILayer.addInputSynapse(Ilsw);
        
        /* Creates and attach the desired learning switch */
        LearningSwitch Dlsw = this.createSwitch(DTdata, DVdata);
        TeachingSynapse ts = new TeachingSynapse(); // The teacher of the net
        ts.setDesired(Dlsw);
        OLayer.addOutputSynapse(ts);
        
        /* Now we put all togheter into a NeuralNet object */
        net = new NeuralNet();
        net.addLayer(ILayer, NeuralNet.INPUT_LAYER);
        net.addLayer(HLayer, NeuralNet.HIDDEN_LAYER);
        net.addLayer(OLayer, NeuralNet.OUTPUT_LAYER);
        net.setTeacher(ts);
        
        /* Reads and inserts the text of the validation macro */
        MacroPlugin mPlugin = new MacroPlugin();
        String validation = this.readFile(new File(path+"/validation.bsh"));
        mPlugin.getMacroManager().addMacro("cycleTerminated", validation);
        /* Sets the scripting */
        mPlugin.setRate(100); // Prints out the results each 100 cycles
        net.setMacroPlugin(mPlugin);
        net.setScriptingEnabled(true); // Enables the scripts' execution
        
        /* Sets the Monitor's parameters */
        Monitor mon = net.getMonitor();
        mon.setLearningRate(0.2);
        mon.setMomentum(0.3);
        
        /* Here we set at the beginning the number of the training rows,
         * because the number of the validation rows is set by the script 
         * at the validation time */
        mon.setTrainingPatterns(130);
        mon.setValidationPatterns(48);
        
        mon.setTotCicles(1000);
        mon.setLearning(true);
    }
    
    /** Creates a FileInputSynapse */
    private FileInputSynapse createInput(String name, int firstRow, int firstCol, int lastCol) {
        FileInputSynapse input = new FileInputSynapse();
        input.setInputFile(new File(name));
        input.setFirstRow(firstRow);
        if (firstCol != lastCol)
            input.setAdvancedColumnSelector(firstCol+"-"+lastCol);
        else
            input.setAdvancedColumnSelector(Integer.toString(firstCol));
        
        // We normalize the input data in the range 0 - 1
        NormalizerPlugIn norm = new NormalizerPlugIn();
        if (firstCol != lastCol)
            norm.setAdvancedSerieSelector("1-"+Integer.toString(lastCol-firstCol+1));
        else
            norm.setAdvancedSerieSelector("1");
        input.addPlugIn(norm);
        return input;
    }
    
    /** Connects two Layers with a Synapse */
    private void connect(Layer ly1, Synapse syn, Layer ly2) {
        ly1.addOutputSynapse(syn);
        ly2.addInputSynapse(syn);
    }
    
    /* Creates a LearningSwitch and attach to it both the training and
       the desired input synapses */
    private LearningSwitch createSwitch(StreamInputSynapse IT, StreamInputSynapse IV) {
        LearningSwitch lsw = new LearningSwitch();
        lsw.addTrainingSet(IT);
        lsw.addValidationSet(IV);
        return lsw;
    }
    
    /**
     * Reads the content of the file.
     *
     * @param	p_file	the content of the file that is to be read.
     * @return	the content of the file.
     */
    private String readFile(File p_file) 
    {
        String str = null, msg;
        FileReader reader = null;
        
        try 
        {
            reader = new FileReader(p_file);
        
            int tch = new Long(p_file.length()).intValue();
            char[] m_buf = new char[tch];
            int nch = reader.read(m_buf);
            if (nch != -1)
                str = new String(m_buf, 0, nch);
            reader.close();

        } catch (FileNotFoundException fnfe) 
        {
            System.err.println(fnfe.getMessage());
            return str;
        } catch (IOException ioe) 
        {
            System.err.println(ioe.getMessage());
        }
        return str;
    }
    
    private void start() {
        net.go();
    }
}

 

Ads help maintain this website.