def __init__(self,batch_size=16, seed=1234,nhu=300,width=5,n_out=len(nerarray),activation_f="hardtanh", embeddingfile=senna_embmtxfile,trainingfile=trainingfile,paramfile=None): modeldir=os.path.join(nerdir,"models",'model_%i'%(len(os.listdir(nerdir+"/models")))) os.mkdir(modeldir) for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) logging.basicConfig(filename=os.path.join(modeldir,'log.txt'), level=logging.INFO, format='%(asctime)s : %(levelname)s : %(message)s') logger.info("\n"+"\n".join(["\t%s : "%key+str(val) for key,val in locals().iteritems() if key!="self"])) self.modeldir=modeldir self.batch_size = batch_size activation=None if activation_f=="hardtanh": activation=hardtanh elif activation_f=="tanh": activation=T.tanh self.load_data(embeddingfile,trainingfile,batch_size) #============================================================================== # BUILD MODEL #============================================================================== logger.info('... building the model') # allocate symbolic variables for the data self.index = T.iscalar() # index to a [mini]batch self.x = T.itensor3('x') # the data is presented as matrix of integers self.y = T.ivector('y') # the labels are presented as 1D vector of # [int] labels self.permutation = T.ivector('permutation') if paramfile!=None: params=pickle.load(open(paramfile,"rb")) else: params=None self.model = SennaNER(input=self.x, embeddings=self.embeddings,features=capsfeatures,n_out=n_out, mini_batch_size=batch_size, nhu=nhu,width=width,activation=activation,seed=seed,params=params) self.test_model = theano.function(inputs=[self.index], outputs=self.model.errors(self.y), givens={ self.x: self.test_set_x[self.index * batch_size:(self.index + 1) * batch_size], self.y: self.test_set_y[self.index * batch_size:(self.index + 1) * batch_size]}, name="test_model") self.validation_cost = theano.function(inputs=[self.index], outputs=self.model.negative_log_likelihood(self.y), givens={ self.x: self.valid_set_x[self.index * batch_size:(self.index + 1) * batch_size], self.y: self.valid_set_y[self.index * batch_size:(self.index + 1) * batch_size]}, name="validation_cost") self.predictions = theano.function(inputs=[self.index], outputs=self.model.predictions, givens={ self.x: self.test_set_x[self.index * batch_size:(self.index + 1) * batch_size]}, name="predictions") self.visualize_hidden = theano.function(inputs=[self.index], outputs=self.model.HiddenLayer.output, givens={ self.x: self.valid_set_x[self.index * batch_size:(self.index + 1) * batch_size]}, name="visualize_hidden")