def trainSequence(self, xs, cs, update=1, key=None): "Train with an integer sequence of codes." assert xs.shape[1] == self.Ni, "wrong image height" # forward step self.outputs = array(self.lstm.forward(xs)) # CTC alignment self.targets = array(make_target(cs, self.No)) self.aligned = array( ctc_align_targets(self.outputs, self.targets, debug=self.debug_align)) # propagate the deltas back deltas = self.aligned - self.outputs self.lstm.backward(deltas) if update: self.lstm.update() # translate back into a sequence result = translate_back(self.outputs) # compute least square error self.error = sum(deltas**2) self.error_log.append(self.error**.5 / len(cs)) # compute class error self.cerror = levenshtein(cs, result) self.cerror_log.append((self.cerror, len(cs))) # training keys self.key_log.append(key) return result
def testLevenshtein(a, b, should): if edist.levenshtein(a, b) == should: print 'ok - levenshtein(%s, %s) == %s' % (a, b, should) return 0 else: print 'not ok - levenshtein(%s, %s) == %s' % (a, b, should) return 1
def trainSequence(self,xs,cs,update=1,key=None): "Train with an integer sequence of codes." assert xs.shape[1]==self.Ni,"wrong image height" # forward step self.outputs = array(self.lstm.forward(xs)) # CTC alignment self.targets = array(make_target(cs,self.No)) self.aligned = array(ctc_align_targets(self.outputs,self.targets,debug=self.debug_align)) # propagate the deltas back deltas = self.aligned-self.outputs self.lstm.backward(deltas) if update: self.lstm.update() # translate back into a sequence result = translate_back(self.outputs) # compute least square error self.error = sum(deltas**2) self.error_log.append(self.error**.5/len(cs)) # compute class error self.cerror = edist.levenshtein(cs,result) self.cerror_log.append((self.cerror,len(cs))) # training keys self.key_log.append(key) return result