Я пытаюсь уменьшить стоимость памяти графического процессора 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
в Керасе.Кто-нибудь может мне помочь?