Преобразование активации веса лазаньи в тензорный поток - PullRequest
0 голосов
/ 07 ноября 2018
net = batch_norm(Conv2DLayer(net, 
                             num_filters=32, 
                             filter_size=7,
                             pad='same', 
                             nonlinearity=elu,  
                             W=GlorotUniform('relu')))

Здесь я применяю серию слоев, которая идет в net-> conv2d-> batch_norm-> elu. Меня смущает, что relu применяется в качестве входного параметра для globaluniform. Означает ли это, что relu применяется к набору весов? Документация смущает меня немного дальше.

Коэффициент масштабирования для весов. Установите значение 1,0 для линейного и сигмовидного единиц, в «relu» или sqrt (2) для выпрямленных линейных единиц, и в sqrt (2 / (1 + альфа ** 2)) для утечек выпрямленных линейных единиц с утечкой альфа. Другие передаточные функции могут нуждаться в других факторах.

Меня смущает утверждение 'relu' или sqrt (2).

Вот как я интерпретирую этот поток кода в тензорном потоке.

    with tf.variable_scope(name, reuse=tf.AUTO_REUSE):

        with tf.variable_scope('conv_1', reuse=tf.AUTO_REUSE):  
            w = tf.get_variable(name='w', 
                                shape=[ksize, ksize, layer.shape[3], ft_size], 
                                dtype=dtype, initializer=initializer)
            w = tf.relu(w)
            b = tf.get_variable(name='b', 
                                shape=[ft_size], 
                                dtype=dtype, 
                                initializer=tf.zeros_initializer())

            layer = tf.nn.conv2d(input=layer, filter=w, strides=strides, padding=padding)
            layer = tf.add(layer, b)

        layer = tf.layers.batch_normalization(layer, training=is_training, momentum=0.9, epsilon=1e-4)
        layer = tf.nn.elu(layer) 
...