Как вытащить и переиспользовать веса из абстракций tf.layers?

Хочу по возможности пользоваться абстракциями TensorFlow вроде tf.layers.dense() вместо переменных весов и смещений, их инициализации, relu() и matmul().

Переписываю модель, где сначала 100500 строк кода с весами-байасами, потом в функции определяется порядок слоёв:
часть кода модели
def model( data, infere = False):
        keep_prob = 1 if infere else 0.5
        L2_regularizer = tf.contrib.layers.l2_regularizer(scale = 1e-4)
        TNI = tf.truncated_normal_initializer(stddev = 0.2, seed = seed)

        # Layers
        conv = tf.nn.conv2d(data, layer1_weights, [1,1,1,1], padding='SAME')
        hidden = tf.nn.relu(conv + layer1_biases)
        maxpool = tf.nn.max_pool(hidden, [1,2,2,1], [1,2,2,1], 'SAME')

        conv = tf.nn.conv2d(maxpool, layer2_weights, [1,1,1,1], padding='SAME')
        hidden = tf.nn.relu(conv + layer2_biases)
        maxpool = tf.nn.max_pool(hidden, [1,3,3,1], [1,2,2,1], 'SAME')

        shape = maxpool.get_shape().as_list()
        reshape = tf.reshape(maxpool, [shape[0], shape[1] * shape[2] * shape[3]])

        dense = tf.layers.dense( inputs = reshape, 
                                    units = 64, 
                                    activation = tf.nn.relu,
                                    kernel_initializer = TNI,
                                    bias_initializer = tf.ones_initializer(),
                                    kernel_regularizer = L2_regularizer,
                                    name = "Dense_1"
                                 )

        dropout = tf.nn.dropout( dense, keep_prob = keep_prob, seed = seed)

        dense = tf.layers.dense( inputs = dropout,
                                    units = 10, 
                                    activation = tf.nn.relu,
                                    kernel_initializer = TNI,
                                    bias_initializer = tf.ones_initializer(),
                                    kernel_regularizer = L2_regularizer,
                                    name = "Dense_2"
                                 )
        return dense


Как поступить с весами для dense слоёв в конце, чтобы их веса были общими между тренировочной, валидирующей и тестовой моделями? Как-то их вытащить и объявить в начале, выше функции? Не понял, что делает параметр reuse = True – может, с ним получится?
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы