import numpy import theano from theano import tensor from blocks.bricks.base import lazy from blocks.bricks import Softmax from model.rnn import RNN, Stream class Model(RNN): @lazy() def __init__(self, config, **kwargs): super(Model, self).__init__(config, rec_input_len=4, output_dim=config.tgtcls.shape[0], **kwargs) self.classes = theano.shared(numpy.array(config.tgtcls, dtype=theano.config.floatX), name='classes') self.softmax = Softmax() self.sequences.extend(['latitude_lag', 'longitude_lag']) self.children.append(self.softmax) def before_predict_all(self, kwargs): super(Model, self).before_predict_all(kwargs) kwargs['latitude_lag'] = tensor.extra_ops.repeat(kwargs['latitude'], 2, axis=0) kwargs['longitude_lag'] = tensor.extra_ops.repeat(kwargs['longitude'], 2, axis=0) def process_rto(self, rto): return tensor.dot(self.softmax.apply(rto), self.classes) def rec_input(self, latitude, longitude, latitude_lag, longitude_lag, **kwargs): return (tensor.shape_padright(latitude), tensor.shape_padright(longitude), tensor.shape_padright(latitude_lag), tensor.shape_padright(longitude_lag))