我想对图像的大块进行卷积。但我不想要太多变量,一个解决方案可能是使用atrous_conv2d
函数,但我更愿意首先在补丁上应用max_pool
,然后在常规conv2d
上应用atrous_conv2d
。我怎么能这样做?
我必须在输入和输出之间保持相同的图像大小。这里的代码带有x = tf.placeholder('float', shape=[None, size_x*size_y])
image = tf.reshape(x, [-1,size_x , size_y,1])
W = weight_variable([9, 9, 1, n])
conv =tf.nn.atrous_conv2d(image, W, 10, padding='SAME')
函数
atrous_conv2d
如果我理解正确max_pool
卷积的补丁大小是(9 * 10 X 9 * 10),但它以10像素间隔作用于每个不同的像素,并且只需要9X9Xn个变量。
我希望采用相同的修补程序大小,对其应用conv2d
,然后在max_pool
生成的(9X9)修补程序上应用传统的x = tf.placeholder('float', shape=[None, size_x*size_y])
image = tf.reshape(x, [-1,size_x , size_y,1])
W = weight_variable([9, 9, 1, n])
def maxp(patch):
tf.sum_reduce(tf.nn.max_pool(patch, ksize=[1,10,10,1],
strides=[1,10,10,1], padding='SAME')*W)
conv=conv_func(image,maxp,patch_size=[1,9*10,9*10,1],strides=[1,1,1,1])
。最后它会产生相同数量的变量,但它可以提供更平滑的结果。代码可能如下所示:
conv_func
其中var app=angular.module("list",[]);
app.controller("myctrl",function($scope){
$scope.get=function(){
$scope.thiss = false;
}
});
将值,函数和patch_size作为参数,并在补丁上应用该函数。