示例#1
0
    def __init__(self, layers, cost, updater='Adam', verbose=2, Y=T.matrix(), iterator='SortedPadded'):
        self.settings = locals()
        del self.settings['self']
        self.layers = layers

        if isinstance(cost, basestring):
            self.cost = case_insensitive_import(costs, cost)
        else:
            self.cost = cost

        if isinstance(updater, basestring):
            self.updater = case_insensitive_import(updates, updater)()
        else:
            self.updater = updater

        if isinstance(iterator, basestring):
            self.iterator = case_insensitive_import(iterators, iterator)()
        else:
            self.iterator = iterator

        # True if output is a padded sequence
        # Padded elements should not contribute to the loss
        # and should be removed before returning predictions.
        self.is_padseq_output = self.cost.__name__ in ['CategoricalPaddedSequenceCrossEntropy']

        self.verbose = verbose
        for i in range(1, len(self.layers)):
            self.layers[i].connect(self.layers[i-1])
        self.params = flatten([l.params for l in layers])

        self.X = self.layers[0].input
        self.y_tr = self.layers[-1].output(dropout_active=True)
        self.y_te = self.layers[-1].output(dropout_active=False)
        self.Y = Y


        if self.is_padseq_output:
            # P codes whether a sequence element was created by padding
            # so that it can be ignored in the loss computation.
            # 0 for padded elements, 1 for not-padded elements
            self.P = T.matrix()
            cost = self.cost(self.Y, self.y_tr, self.P)
        else:
            cost = self.cost(self.Y, self.y_tr)
        self.updates = self.updater.get_updates(self.params, cost)
        if self.is_padseq_output:
            self._train = theano.function([self.X, self.Y, self.P], cost, updates=self.updates)
            self._cost = theano.function([self.X, self.Y, self.P], cost)
        else:
            self._train = theano.function([self.X, self.Y], cost, updates=self.updates)
            self._cost = theano.function([self.X, self.Y], cost)
        self._predict = theano.function([self.X], self.y_te)
示例#2
0
    def __init__(self,
                 layers,
                 cost,
                 updater='Adam',
                 verbose=2,
                 Y=T.matrix(),
                 iterator='SortedPadded'):
        self.settings = locals()
        del self.settings['self']
        self.layers = layers

        if isinstance(cost, basestring):
            self.cost = case_insensitive_import(costs, cost)
        else:
            self.cost = cost

        if isinstance(updater, basestring):
            self.updater = case_insensitive_import(updates, updater)()
        else:
            self.updater = updater

        if isinstance(iterator, basestring):
            self.iterator = getattr(iterators, iterator)()
        else:
            self.iterator = iterator

        self.verbose = verbose
        for i in range(1, len(self.layers)):
            self.layers[i].connect(self.layers[i - 1])
        self.params = flatten([l.params for l in layers])

        self.X = self.layers[0].input
        self.y_tr = self.layers[-1].output(dropout_active=True)
        self.y_te = self.layers[-1].output(dropout_active=False)
        self.Y = Y

        cost = self.cost(self.Y, self.y_tr)
        self.updates = self.updater.get_updates(self.params, cost)

        self._train = theano.function([self.X, self.Y],
                                      cost,
                                      updates=self.updates)
        self._params = theano.function([], self.params[0])
        self._cost = theano.function([self.X, self.Y], cost)
        self._predict = theano.function([self.X], self.y_te)
示例#3
0
文件: models.py 项目: 2020zyc/Passage
    def __init__(self, layers, cost, updater='Adam', verbose=2, Y=T.matrix(), iterator='SortedPadded'):
        self.settings = locals()
        del self.settings['self']
        self.layers = layers

        if isinstance(cost, basestring):
            self.cost = case_insensitive_import(costs, cost)
        else:
            self.cost = cost

        if isinstance(updater, basestring):
            self.updater = case_insensitive_import(updates, updater)()
        else:
            self.updater = updater

        if isinstance(iterator, basestring):
            self.iterator = case_insensitive_import(iterators, iterator)()
        else:
            self.iterator = iterator

        self.verbose = verbose
        for i in range(1, len(self.layers)):
            self.layers[i].connect(self.layers[i-1])
        self.params = flatten([l.params for l in layers])

        self.X = self.layers[0].input
        self.y_tr = self.layers[-1].output(dropout_active=True)
        self.y_te = self.layers[-1].output(dropout_active=False)
        self.Y = Y

        cost = self.cost(self.Y, self.y_tr)
        self.updates = self.updater.get_updates(self.params, cost)

        self._train = theano.function([self.X, self.Y], cost, updates=self.updates)
        self._cost = theano.function([self.X, self.Y], cost)
        self._predict = theano.function([self.X], self.y_te)