source: orange/Orange/OrangeWidgets/Classify/OWNeuralNetwork.py @ 11560:b14abf103fda

Revision 11560:b14abf103fda, 3.4 KB checked in by Jure Zbontar <jure.zbontar@…>, 11 months ago (diff)

Add NN widget

Line 
1"""
2<name>Neural Network</name>
3<description>Neural network learner.</description>
4<priority>20<priority>
5<icon>icons/NeuralNetwork.svg</icon>
6
7"""
8
9import Orange
10from orngWrap import PreprocessedLearner
11
12from OWWidget import *
13import OWGUI
14
15class OWNeuralNetwork(OWWidget):
16    settingsList = ["name", "n_mid", "reg_fact", "max_iter", "normalize"]
17
18    def __init__(self, parent=None, signalManager=None,
19                 title="Neural Network"):
20        OWWidget.__init__(self, parent, signalManager, title,
21                          wantMainArea=False)
22
23        self.inputs = [("Data", Orange.data.Table, self.set_data),
24                       ("Preprocess", PreprocessedLearner,
25                        self.set_preprocessor)
26                       ]
27        self.outputs = [("Learner", Orange.classification.Learner),
28                        ("Classifier", Orange.classification.Classifier)
29                        ]
30
31        self.name = "Neural Network"
32        self.n_mid = 20
33        self.reg_fact = 1
34        self.max_iter = 300
35        self.normalize = True
36
37        self.loadSettings()
38
39        box = OWGUI.widgetBox(self.controlArea, "Name", addSpace=True)
40        OWGUI.lineEdit(box, self, "name")
41
42        box = OWGUI.widgetBox(self.controlArea, "Settings", addSpace=True)
43        OWGUI.spin(box, self, "n_mid", 2, 10000, 1,
44                   label="Hidden layer neurons",
45                   tooltip="Number of neurons in the hidden layer."
46                   )
47
48        OWGUI.doubleSpin(box, self, "reg_fact", 0.1, 10.0, 0.1,
49                         label="Regularization factor",
50                         )
51
52        OWGUI.spin(box, self, "max_iter", 100, 10000, 1,
53                   label="Max iterations",
54                   tooltip="Maximal number of optimization iterations."
55                   )
56
57        OWGUI.button(self.controlArea, self, "&Apply",
58                     callback=self.apply,
59                     tooltip="Create the learner and apply it on input data.",
60                     autoDefault=True
61                     )
62
63        OWGUI.checkBox(box, self, 'normalize', 'Normalize the data')
64
65        self.data = None
66        self.preprocessor = None
67        self.apply()
68
69    def set_data(self, data=None):
70        self.data = data
71        self.error([0])
72        self.data = data
73        self.apply()
74
75    def set_preprocessor(self, preprocessor=None):
76        self.preprocessor = preprocessor
77
78    def apply(self):
79        learner = Orange.classification.neural.NeuralNetworkLearner(
80            name=self.name, n_mid=self.n_mid,
81            reg_fact=self.reg_fact, max_iter=self.max_iter
82        )
83
84        if self.preprocessor is not None:
85            learner = self.preprocessor.wrapLearner(learner)
86
87        classifier = None
88        self.error([1])
89        if self.data is not None:
90            try:
91                classifier = learner(self.data)
92                classifier.name = self.name
93            except Exception, ex:
94                self.error(1, str(ex))
95
96        self.send("Learner", learner)
97        self.send("Classifier", classifier)
98
99    def sendReport(self):
100        self.reportSettings("Parameters",
101                            [("Hidden layer neurons", self.n_mid),
102                             ("Regularization factor", self.reg_fact),
103                             ("Max iterations", self.max_iter)]
104                            )
105
106
107if __name__ == "__main__":
108    app = QApplication(sys.argv)
109    w = OWNeuralNetwork()
110    w.show()
111    app.exec_()
112    w.saveSettings()
Note: See TracBrowser for help on using the repository browser.