|
|
@ -0,0 +1,62 @@ |
|
|
|
import matplotlib.pyplot as plt |
|
|
|
import numpy as np |
|
|
|
from random import randint |
|
|
|
import pickle |
|
|
|
from sknn.mlp import Classifier, Layer, Convolution |
|
|
|
|
|
|
|
def datasetToTrainAndTestData(dataset, numtest): |
|
|
|
np.random.shuffle(dataset) |
|
|
|
print "length total data:" + str(len(dataset)) |
|
|
|
|
|
|
|
traindata = np.copy(dataset) |
|
|
|
testdata = [] |
|
|
|
for i in range(numtest): |
|
|
|
#get random integer between 0 and the total amount of images in the dataset |
|
|
|
n = randint(0, len(traindata)) |
|
|
|
testdata.append(dataset[n]) |
|
|
|
|
|
|
|
#delete the n image (dataset[n]) of the traindata |
|
|
|
traindata = np.delete(traindata, n, axis=0) |
|
|
|
testdataNP = np.array(testdata) |
|
|
|
return traindata, testdataNP |
|
|
|
|
|
|
|
|
|
|
|
#read the dataset made with the 'imagesToDataset' repository |
|
|
|
dataset = np.load('dataset.npy') |
|
|
|
|
|
|
|
traindata, testdata = datasetToTrainAndTestData(dataset, 10) |
|
|
|
print "length traindata: " + str(len(traindata)) |
|
|
|
print "length testdata: " + str(len(testdata)) |
|
|
|
|
|
|
|
#traindataAttributes contains all the pixels of each image |
|
|
|
traindataAttributes = traindata[:,0] |
|
|
|
traindataAttributes = np.array([[row] for row in traindataAttributes]) |
|
|
|
|
|
|
|
#traindataLabels contains each label of each image |
|
|
|
traindataLabels = traindata[:,1] |
|
|
|
traindataLabels = traindataLabels.astype('int') |
|
|
|
|
|
|
|
#testdataAttributes contains the pixels of the test images |
|
|
|
testdataAttributes = testdata[:,0] |
|
|
|
testdataAttributes = np.array([[row] for row in testdataAttributes]) |
|
|
|
|
|
|
|
#testdataLabels contains each label of each image |
|
|
|
testdataLabels = testdata[:,1] |
|
|
|
testdataLabels = testdataLabels.astype('int') |
|
|
|
|
|
|
|
#default: units=100, learning_rate=0.001, n_iter=25 |
|
|
|
nn = Classifier( |
|
|
|
layers=[ |
|
|
|
Layer("Sigmoid", units=10), |
|
|
|
Layer("Softmax")], |
|
|
|
learning_rate=0.001, |
|
|
|
n_iter=20, |
|
|
|
verbose=True) |
|
|
|
|
|
|
|
nn.fit(traindataAttributes, traindataLabels) |
|
|
|
|
|
|
|
print('\nTRAIN SCORE', nn.score(traindataAttributes, traindataLabels)) |
|
|
|
print('TEST SCORE', nn.score(testdataAttributes, testdataLabels)) |
|
|
|
|
|
|
|
#save the neural network configuration |
|
|
|
pickle.dump(nn, open('nn.pkl', 'wb')) |