Package com.digiburo.backprop1b.demo3

Source Code of com.digiburo.backprop1b.demo3.NnResultPanel

package com.digiburo.backprop1b.demo3;

import java.io.File;

import java.awt.event.*;

import java.awt.GridLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;

import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;

import com.digiburo.backprop1b.network.Pattern;
import com.digiburo.backprop1b.network.PatternList;

/**
* GUI for BdDemo3.  Divided into four panels.
* Left to right: selection, edit, result.
* Bottom: apply button.
*
* <P>
* Selection panel as ten buttons, one for each digit.  This permits
* selection of any training digit.  When the button is pressed,
* the original pixels as presented in the edit panel.
*
* <P>
* Edit panel allows a pixel to be toggled as set/cleared.  This
* allows one to distort the original pattern.
*
* <P>
* Result panel shows the answer from the neural network. 
*
* <P>
* Apply button submits the pattern contained in the edit panel
* to the neural network and updates the result panel w/the answer.
*
* @author G.S. Cole (gsc@digiburo.com)
* @version $Id: BpDigitTestGui.java,v 1.3 2002/02/03 20:31:41 gsc Exp $
*/

/*
* Development Environment:
*   Linux 2.2.12-20 (Red Hat 6.1)
*   Java Developers Kit 1.2.2-RC2-K
*
* Legalise: 
*   Copyright (C) 2002 Digital Burro, INC.
*
* Maintenance History:
*   $Log: BpDigitTestGui.java,v $
*   Revision 1.3  2002/02/03 20:31:41  gsc
*   Format tweaks
*
*   Revision 1.2  2002/02/03 18:51:08  gsc
*   Format tweaks
*
*   Revision 1.1  2002/02/03 04:24:05  gsc
*   Initial Check In
*/

public class BpDigitTestGui extends JFrame {
  public static final String TRAIN_FILENAME = "demo3.trn";   
    public static final String NETWORK_FILENAME = "demo3.serial";

    public static final double ONE = 0.9999999999;
    public static final double ZERO = 0.0000000001;

    private final NnResultPanel nrp;
    private final PatternEditPanel pep;
    private final GridBagConstraints gbc;

  /**
     *
     */
  public BpDigitTestGui(String frame_title, final BpDemo3 bd3, final PatternList training) {
    super(frame_title);

    //
    // Specify layout hints
    //
    gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.BOTH;
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.weightx = 100;
    gbc.weighty = 100;

    getContentPane().setLayout(new GridBagLayout());

    pep = new PatternEditPanel(bd3, training);
    PatternSelectPanel psp = new PatternSelectPanel(pep);
    nrp = new NnResultPanel();
    JButton apply_button = new JButton("Apply Pattern");

    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = 1;
    gbc.gridheight = 1;
    getContentPane().add(psp, gbc);

    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.gridwidth = 1;
    gbc.gridheight = 1;
    getContentPane().add(pep, gbc);

    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.gridwidth = 1;
    gbc.gridheight = 1;
    getContentPane().add(nrp, gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.gridwidth = 3;
    gbc.gridheight = 1;
    gbc.weighty = 20;
    getContentPane().add(apply_button, gbc);

    apply_button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        nrp.setAnswer(bd3.runNetwork(pep.getPattern()));
      }
    });
  }

  /**
   * driver
   */
  public static void main(String args[]) throws Exception {
    System.out.println("begin");

    BpDemo3 bd3 = null;
    PatternList training = null;

    training = new PatternList();
    training.reader(new File(TRAIN_FILENAME));

    if (args.length == 0) {
      bd3 = new BpDemo3(new File(NETWORK_FILENAME));
    } else {
      bd3 = new BpDemo3(new File(args[0]));
    }

    BpDigitTestGui bdtg = new BpDigitTestGui("BP Demo 3", bd3, training);

    bdtg.setBackground(java.awt.Color.white);
    bdtg.setSize(500, 350);
    bdtg.setVisible(true);

    System.out.println("end");
  }  
 
  /**
   * eclipse generated
   */
  private static final long serialVersionUID = -7071344260848058959L;
}

/**
* Select a digit to display.
*/
class PatternSelectPanel extends JPanel {

  /**
   * @param pep
   */
  public PatternSelectPanel(final PatternEditPanel pep) {
    setLayout(new GridLayout(5, 2));

    JButton selections[] = new JButton[10];
    for (int ii = 0; ii < 10; ii++) {
      selections[ii] = new JButton(Integer.toString(ii));
      add(selections[ii]);

      selections[ii].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
          pep.setPattern(Integer.parseInt(event.getActionCommand()));
        }
      });
    }

    BevelBorder bevel_border = new BevelBorder(BevelBorder.RAISED);
    this.setBorder(new TitledBorder(bevel_border, "Select Pattern"));
  }
 
  /**
   * eclipse generated
   */
  private static final long serialVersionUID = -5698181693665181035L;
}

/**
* Show the responses from BackProp
*/
class NnResultPanel extends JPanel {

  private JButton[] results;

  /**
     *
     */
  public NnResultPanel() {
    setLayout(new GridLayout(5, 2));

    results = new JButton[10];
    for (int ii = 0; ii < 10; ii++) {
      results[ii] = new JButton(Integer.toString(ii));
      add(results[ii]);
    }

    BevelBorder bevel_border = new BevelBorder(BevelBorder.RAISED);
    this.setBorder(new TitledBorder(bevel_border, "Answer"));

    double temp[] = new double[10];
    setAnswer(temp);
  }

  /**
     *
     */
  public void setAnswer(double[] answers) {
    for (int ii = 0; ii < answers.length; ii++) {
      if (answers[ii] > 0.75) {
        results[ii].setBackground(java.awt.Color.red);
        results[ii].setForeground(java.awt.Color.black);
      } else {
        results[ii].setBackground(java.awt.Color.black);
        results[ii].setForeground(java.awt.Color.red);
      }
    }
  } 
 
  /**
   * eclipse generated
   */
  private static final long serialVersionUID = -4356291377159597583L;
}

/**
* Interactive 5x5 edit panel
*/
class PatternEditPanel extends JPanel {

  private PatternList training;

  private JButton[] pixels;
  private double[] pattern;

  /**
     *
     */
  public PatternEditPanel(BpDemo3 bd3, PatternList training) {
    this.training = training;

    pattern = new double[25];

    setLayout(new GridLayout(5, 5));

    pixels = new JButton[25];
    for (int ii = 0; ii < 25; ii++) {
      pattern[ii] = 0.0;
      pixels[ii] = new JButton(Integer.toString(ii));
      pixels[ii].setBackground(java.awt.Color.black);
      add(pixels[ii]);

      pixels[ii].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
          int ndx = Integer.parseInt(event.getActionCommand());

          if (pattern[ndx] < 0.5) {
            pattern[ndx] = BpDigitTestGui.ONE;
            pixels[ndx].setBackground(java.awt.Color.red);
          } else {
            pattern[ndx] = BpDigitTestGui.ZERO;
            pixels[ndx].setBackground(java.awt.Color.black);
          }
        }
      });
    }

    BevelBorder bevel_border = new BevelBorder(BevelBorder.RAISED);
    this.setBorder(new TitledBorder(bevel_border, "Pattern Edit"));
  }

  /**
   * Show the pattern used for training
   *
   * @param ndx
   *            index into PatternList
   */
  public void setPattern(int ndx) {
    // System.out.println("set pattern " + ndx);

    Pattern pp = training.get(ndx);

    double[] original = pp.getInput();

    for (int ii = 0; ii < original.length; ii++) {
      pattern[ii] = original[ii];

      // System.out.println(ii + " " + original[ii]);

      if (original[ii] < 0.5) {
        pixels[ii].setBackground(java.awt.Color.black);
      } else {
        pixels[ii].setBackground(java.awt.Color.red);
      }
    }
  }

    /**
     *
     */
    public double[] getPattern() {
      return(pattern);
   
   
    /**
   * eclipse generated
   */
  private static final long serialVersionUID = 7143340791046661355L;

}
TOP

Related Classes of com.digiburo.backprop1b.demo3.NnResultPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.