我目前正在尝试通过使用可分离的卷积代替常规的卷积来使我的网络更快。一句话不要被其他代码片段弄糊涂了。他们被放置在那里以解决这个问题。我的猜测是我以错误的方式构建了深度和逐点转换,但是我不知道如何使用它。提前致谢!
我将下面的代码与常规卷积一起用作输入,我给出了(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遇到内存问题。