Как использовать функцию тензорного потока Recompute_grad в Keras - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь уменьшить стоимость памяти графического процессора DenseNet.Я нашел, что кто-то использует tf.contrib.layers.recompute_grad для завершения этой работы в tenorflow.У меня есть модель Keras, и я хочу использовать tf.contrib.layers.recompute_grad в Keras.Я попытался использовать пользовательский слой Keras, чтобы обернуть его.

class Back_Recompute(Layer):
def __init__(self, filters, kernel_size, w_decay, **kwargs):
    super(Back_Recompute, self).__init__(**kwargs)
    self.n_filters = filters
    self.we_decay = w_decay
    self.ks = kernel_size

def call(self, ip):
    global brcount

    with tf.variable_scope('BR_{}'.format(brcount), use_resource=True):
        def _x(inner_ip):
             x = Conv2D(self.n_filters, self.ks, kernel_initializer='he_normal', padding='same', use_bias=False,
                        kernel_regularizer=l2(self.we_decay))(inner_ip)
            return x

        brcount = brcount + 1

        _x = tf.contrib.layers.recompute_grad(_x)
        return _x(ip)  

def compute_output_shape(self, input_shape):
    return (input_shape[0], input_shape[1], input_shape[2], self.n_filters)

Но странная проблема в том, что мой код поезда застрял в fit_generator и не может быть выполнен без сообщения об ошибке.Тогда я подумал, что это, вероятно, из-за слоя Keras, поэтому я изменил слой Keras Conv2D на tf.layers.conv2d.Когда я запускаю код поезда, я получаю сообщение об ошибке: AttributeError: у объекта «Activation» нет атрибута «outbound_nodes».Я не знаю, как использовать tf.contrib.layers.recompute_grad в Керасе.Кто-нибудь может мне помочь?

...