class SequencePrediction(object): def __init__(self, seq, n, k): self.seq = seq self.n = n self.k = k def normalize_one(self, a): return a # return 2.*a/100. def denormalize_one(self, a): return a # return a*100./2. def normalize(self, list_): return [self.normalize_one(e) for e in list_] def denormalize(self, list_): return [self.denormalize_one(e) for e in list_] def get_sample(self): sample = [] for i in xrange(len(self.seq)-(self.n+self.k)+1): sample.append((self.seq[i:i+self.n], self.seq[i+self.n:i+self.n+self.k])) return sample def prepare(self, iterations): self.nw = NeuralNetw() self.nw.init_layers(self.n, self.n+self.k, self.k) self.nw.randomize() self.nw.train(iterations, self.get_sample()) def predict(self): self.prepare(5000) ask_for = self.seq[-(self.n+self.k-1):] if self.k>1: ask_for = ask_for[:-(self.k-1)] print "asking for: %s" % (ask_for) last = self.normalize(ask_for) return self.denormalize(self.nw.process_sample(Context(last, [])))