小编Mat*_*ský的帖子

在卷积层中不能同时使用偏差和批量归一化

我使用slim框架进行张量流,因为它简单.但是我希望卷积层具有偏差和批量标准化.在vanilla tensorflow中,我有:

def conv2d(input_, output_dim, k_h=5, k_w=5, d_h=2, d_w=2, name="conv2d"):
    with tf.variable_scope(name):
        w = tf.get_variable('w', [k_h, k_w, input_.get_shape()[-1], output_dim],

    initializer=tf.contrib.layers.xavier_initializer(uniform=False))
    conv = tf.nn.conv2d(input_, w, strides=[1, d_h, d_w, 1], padding='SAME')

    biases = tf.get_variable('biases', [output_dim], initializer=tf.constant_initializer(0.0))
    conv = tf.reshape(tf.nn.bias_add(conv, biases), conv.get_shape())

    tf.summary.histogram("weights", w)
    tf.summary.histogram("biases", biases)

    return conv

d_bn1 = BatchNorm(name='d_bn1')
h1 = lrelu(d_bn1(conv2d(h0, df_dim + y_dim, name='d_h1_conv')))
Run Code Online (Sandbox Code Playgroud)

然后我把它重写为苗条:

h1 = slim.conv2d(h0,
                 num_outputs=self.df_dim + self.y_dim,
                 scope='d_h1_conv',
                 kernel_size=[5, 5],
                 stride=[2, 2],
                 activation_fn=lrelu,
                 normalizer_fn=layers.batch_norm,
                 normalizer_params=batch_norm_params,                           
                 weights_initializer=layers.xavier_initializer(uniform=False),
                 biases_initializer=tf.constant_initializer(0.0)
                 )
Run Code Online (Sandbox Code Playgroud)

但是这段代码不会给conv层增加偏见.那是因为https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/layers/python/layers/layers.py#L1025其中是

    layer = layer_class(filters=num_outputs,
                    kernel_size=kernel_size, …
Run Code Online (Sandbox Code Playgroud)

python tensorflow

16
推荐指数
1
解决办法
7232
查看次数

实例归一化和组归一化缺少更新

在 tensorflow 中,有一个众所周知的批量归一化,它将权重更新操作添加到tf.GraphKeys.UPDATE_OPS。但是在实例规范化的情况下,没有添加更新操作。使用时tf.contrib.layer.batch_norm,我可以指定is_training将更新操作添加到集合的参数。但是 for tf.contrib.layer.instance_normandtf.contrib.layer.group_norm没有这样的参数,也没有添加 op 到tf.GraphKeys.UPDATE_OPS.

这是正确的行为,还是 tensorflow 中的错误?那么实例标准化中的更新操作如何工作?

python tensorflow

3
推荐指数
1
解决办法
860
查看次数

Julia 根据条件将向量分割为子向量的惯用方法

假设我有一个向量a = [1, 0, 1, 2, 3, 4, 5, 0, 5, 6, 7, 8, 0, 9, 0],我想根据该数组中的值的条件将其分割为更小的向量。例如值为零。\n因此我想获得以下向量的向量

\n
 [1, 0]\n [1, 2, 3, 4, 5, 0]\n [5, 6, 7, 8, 0]\n [9, 0]\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止,这对我来说是一个幼稚的解决方案,但它失去了类型。

\n
function split_by_\xce\xbb(a::Vector, \xce\xbb)\n    b = []\n    temp = []\n    for i in a\n        push!(temp, i)\n        if \xce\xbb(i)\n            push!(b, temp)\n            temp = []\n        end\n    end\n    b\nend\nsplit_by_\xce\xbb(a, isequal(0))\n
Run Code Online (Sandbox Code Playgroud)\n

然后我尝试使用范围,感觉更惯用一点,并且不会丢失类型。

\n
function split_by_\xce\xbb(a::Vector, \xce\xbb)\n    idx = findall(\xce\xbb, a)\n    ranges = [(:)(i==1 ? 1 : …
Run Code Online (Sandbox Code Playgroud)

idioms julia

2
推荐指数
1
解决办法
1844
查看次数

标签 统计

python ×2

tensorflow ×2

idioms ×1

julia ×1