-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsec4_hwk1_pybrain_iris-ds.py
48 lines (41 loc) · 1.38 KB
/
sec4_hwk1_pybrain_iris-ds.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/python3
import numpy as np
import neuralnets_functions as nnf
from sklearn import datasets
import pybrain
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised import BackpropTrainer
from pybrain.structure.modules import SigmoidLayer
from pybrain.structure.modules import SoftmaxLayer
iris = datasets.load_iris()
inputs = iris.data
outputs = iris.target
network = buildNetwork(4, 4, 4, 3, outclass = SoftmaxLayer, hiddenclass = SigmoidLayer, bias = False)
dataset = SupervisedDataSet(4, 3)
for i in range(len(inputs)):
if outputs[i] == 0:
output = (1, 0, 0, )
elif outputs[i] == 1:
output = (0, 1, 0,)
else:
output = (0, 0, 1, )
dataset.addSample((inputs[i][0], inputs[i][1], inputs[i][2], inputs[i][3]), output)
#print(dataset['input'][:5])
optimizer = BackpropTrainer(module=network, dataset = dataset, learningrate = 0.01)
epochs = 3000
error = []
for epoch in range(epochs):
error_average = optimizer.train()
if error_average < 0.005:
break
if epoch % 100 == 0:
print('Epoch: ' + str(epoch + 1) + ' Error: ' + str(error_average))
error.append(error_average)
print('Epoch: ' + str(epoch + 1) + ' Error: ' + str(error_average))
import matplotlib.pyplot as plt
plt.xlabel('Epoch')
plt.ylabel('Error')
plt.plot(error)
plt.show()
print(np.argmax(network.activate(inputs[101])))