将conv2d转换为tf.nn.separable_conv2d运行到内存错误

时间:2018-10-08 09:25:31

标签: python tensorflow

我目前正在尝试通过使用可分离的卷积代替常规的卷积来使我的网络更快。一句话不要被其他代码片段弄糊涂了。他们被放置在那里以解决这个问题。我的猜测是我以错误的方式构建了深度和逐点转换,但是我不知道如何使用它。提前致谢!

我将下面的代码与常规卷积一起用作输入,我给出了(1,800,800,3)输入,并使用了3x3内核和32个过滤器。两种方法具有相同的语法

git merge --strategy ours

然后,我定义变量w和b以及批处理规范。

def conv(input, kernel_size, filters, stride, is_training, batchnorm=True, activation=tf.nn.relu, name="conv"):

直到这里一切都按预期工作,当我运行代码时,我可以训练我的网络。

现在,我尝试使用tf.nn.separable_conv2d推导单独的卷积

因此我用

with tf.variable_scope(name):
    weights = tf.get_variable('weights',
                              shape=[kernel_size, kernel_size, input.get_shape()[3], filters],
                              initializer=tf.contrib.layers.xavier_initializer()
                              )
    biases = tf.get_variable('biases',
                             shape=[filters],
                             initializer=tf.constant_initializer(0.0)
                             )
    conv = tf.nn.conv2d(input, weights, strides=[1, stride, stride, 1], padding='SAME')
    output = tf.nn.bias_add(conv, biases)

    if batchnorm:
        output = tf.layers.batch_normalization(output, training=is_training, center=True, scale=False)

    if activation is not None:
        output = activation(output)
    return output

网络运行良好,然后我的Gtx1080ti遇到内存问题。

enter image description here

0 个答案:

没有答案