Подтвердить что ты не робот

Неконтролируемый предварительный тренинг для сверточной нейронной сети в анано

Я хотел бы создать глубокую сеть с одним (или более) сверточными слоями (CNN) и одним или несколькими полностью связанными скрытыми слоями сверху.
Для глубокой сети с полностью связанными слоями существуют методы в anano для неконтролируемого предварительного обучения, например, с помощью шумоподавляющих автокодеров или RBMS.

Мой вопрос: как я могу реализовать (в anano) неконтролируемый этап предварительной подготовки для сверточных слоев?

Я не ожидаю полной реализации в качестве ответа, но я был бы признателен за ссылку на хороший учебник или надежную ссылку.

4b9b3361

Ответ 1

В этом документе описывается подход для построения сложного сверточного автокодера. На основе этой статьи и некоторых поисков Google я смог реализовать описанную сеть. В принципе, все, что вам нужно, описано в сверточной сети Theano и шумоподавляющих обучающих программах с одним важным исключением: как изменить шаг максимального пула в сверточной сети. Я смог это сделать, используя метод это обсуждение - самая сложная часть - выяснить правильные измерения для W_prime, поскольку они будут зависеть от подавать форвардные фильтры и коэффициент объединения. Вот моя инвертирующая функция:

    def get_reconstructed_input(self, hidden):
        """ Computes the reconstructed input given the values of the hidden layer """
        repeated_conv = conv.conv2d(input = hidden, filters = self.W_prime, border_mode='full')

        multiple_conv_out = [repeated_conv.flatten()] * np.prod(self.poolsize)

        stacked_conv_neibs = T.stack(*multiple_conv_out).T

        stretch_unpooling_out = neibs2images(stacked_conv_neibs, self.pl, self.x.shape)

        rectified_linear_activation = lambda x: T.maximum(0.0, x)
        return rectified_linear_activation(stretch_unpooling_out + self.b_prime.dimshuffle('x', 0, 'x', 'x'))