def __init__(self,input_size,output_size,layer_sizes=[500],learning_rate=0.01, L1_reg=0.00, L2_reg=0.0001, n_epochs=1000,batch_size=20): self.learning_rate = learning_rate self.L1_reg = L1_reg self.L2_reg = L2_reg self.n_epochs = n_epochs self.batch_size=batch_size self.x = T.matrix('x') self.mlp = MultiMLP(input = self.x, n_in = input_size, \ layer_sizes = layer_sizes, n_out = output_size)
class MultiMLPClassifier(object) : def __init__(self,input_size,output_size,layer_sizes=[500],learning_rate=0.01, L1_reg=0.00, L2_reg=0.0001, n_epochs=1000,batch_size=20): self.learning_rate = learning_rate self.L1_reg = L1_reg self.L2_reg = L2_reg self.n_epochs = n_epochs self.batch_size=batch_size self.x = T.matrix('x') self.mlp = MultiMLP(input = self.x, n_in = input_size, \ layer_sizes = layer_sizes, n_out = output_size) def fit(self,X,y): X_train, X_valid, y_train, y_valid = self.splitData(X,y) train_model(self.mlp,self.x, X_train,X_valid,y_train, y_valid, self.L1_reg, self.L2_reg, self.learning_rate, self.n_epochs, self.batch_size) # def predict(self,X, y = None): fit_model = theano.function( inputs=[], outputs=self.mlp.predict_class, givens={self.x : X} ) if(y != None): validate_model = theano.function(inputs=[], outputs=self.mlp.errors(y), givens={ self.x: X, y: y}) print((' validation error %f %%') % (validate_model() * 100.)) return fit_model() def predict_proba(self,X, y = None): fit_model = theano.function( inputs=[], outputs=self.mlp.predict_proba, givens={self.x : X} ) if(y != None): validate_model = theano.function(inputs=[], outputs=self.mlp.errors(y), givens={ self.x: X, y: y}) print((' validation error %f %%') % (validate_model() * 100.)) return fit_model() def getSharedInstance(self,array): return theano.shared(np.asarray(array, dtype=theano.config.floatX)) def splitData(self,X,y): r = np.random.rand(X.shape[0]) X_train = self.getSharedInstance(X[r<0.9]) X_valid = self.getSharedInstance(X[r>=0.9]) y_train = T.as_tensor_variable(y[r<0.9]) y_valid = T.as_tensor_variable(y[r>=0.9]) # First 90% train, Lirst 10% validation return X_train, \ X_valid, \ T.cast(y_train,'int32'), \ T.cast(y_valid,'int32')