In [1]:
%pylab inline
from classy import *
In [2]:
data=load_excel('data/iris.xls')
data_train,data_test=split(data,test_size=0.2)
In [3]:
X=data.vectors
Y=data.targets
In [4]:
from keras.utils import np_utils
In [37]:
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(data_train.targets)
In [38]:
dummy_y[:10,:]
Out[38]:
In [39]:
dummy_y.shape
Out[39]:
In [40]:
from keras.models import Sequential
from keras.layers import Dense
import numpy
# fix random seed for reproducibility
numpy.random.seed(7)
In [41]:
data_train.vectors.shape
Out[41]:
In [42]:
data_train.vectors.shape
Out[42]:
In [43]:
# create model
model = Sequential()
model.add(Dense(12, input_dim=data_train.vectors.shape[1], activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(dummy_y.shape[1], activation='sigmoid'))
In [44]:
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
In [49]:
model.fit(data_train.vectors, dummy_y,epochs=300,batch_size=10,verbose=False)
Out[49]:
In [50]:
# evaluate the model
scores = model.evaluate(data_train.vectors, dummy_y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
In [56]:
model.predict(data_test.vectors)
Out[56]:
In [59]:
out=model.predict(data_test.vectors)
argmax(out,axis=1)
Out[59]:
In [104]:
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils
class KerasMLP(object):
def percent_correct(self,vectors,targets):
return self.score(vectors,targets)*100.0
def __init__(self,**kwargs):
self.model=None
self.dummy_y=None
self.hidden_layer_sizes=kwargs.get('hidden_layer_sizes',[4])
model.add(Dense(12, input_dim=data_train.vectors.shape[1], activation='relu'))
def fit(self,*args,**kwargs):
X,Y=args[0],args[1]
epochs=kwargs.get('epochs',300)
batch_size=kwargs.get('batch_size',10)
if self.model is None:
self.model=Sequential()
self.model.add(Dense(self.hidden_layer_sizes[0], input_dim=X.shape[1], activation='relu'))
for n in self.hidden_layer_sizes[1:]:
self.model.add(Dense(n, activation='relu'))
self.dummy_y = np_utils.to_categorical(Y)
self.model.add(Dense(self.dummy_y.shape[1], activation='sigmoid'))
self.model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
self.model.fit(X, dummy_y,epochs=epochs,batch_size=batch_size,verbose=False)
self.weights=[]
self.bias=[]
for layer in self.model.layers:
w,b = layer.get_weights()
self.weights.append(w)
self.bias.append(b)
def percent_correct(self,vectors,targets):
dummy_y = np_utils.to_categorical(targets)
scores = self.model.evaluate(vectors, dummy_y,verbose=False)
return scores[1]
def output(self, X):
return self.model.predict(X)
def predict(self, X):
output=self.model.predict(X)
return argmax(output,axis=1)
def predict_names(self,vectors,names):
result=self.predict(vectors)
return [names[i] for i in result]
In [96]:
C=KerasMLP(hidden_unit_sizes=[4])
In [97]:
timeit(reset=True)
C.fit(data_train.vectors,data_train.targets)
print(("Training time: ",timeit()))
In [98]:
print(("On Training Set:",C.percent_correct(data_train.vectors,data_train.targets)))
print(("On Test Set:",C.percent_correct(data_test.vectors,data_test.targets)))
In [99]:
C.predict(data_train.vectors)
Out[99]:
In [100]:
data_train.targets
Out[100]:
In [103]:
C.weights,C.bias
Out[103]:
In [ ]: