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'))