如何解决如何将高斯滤波器与TensorFlow tf.layers.conv2d集成?
以下gkern()函数在给定的内核大小和标准偏差的情况下生成所需的高斯内核。但是,将生成的高斯核应用于特定的传统Conv图层的特征图后,它会产生以下值错误:如何处理形状不兼容的问题?
def gkern(kernlen=3,nsig=1):
"""Returns a 2D Gaussian kernel array."""
interval = (2*nsig+1.)/(kernlen)
x = np.linspace(-nsig-interval/2.,nsig+interval/2.,kernlen+1)
kern1d = np.diff(st.norm.cdf(x))
kernel_raw = np.sqrt(np.outer(kern1d,kern1d))
kernel = kernel_raw/kernel_raw.sum()
return (tf.convert_to_tensor(kernel,dtype=tf.float32))
def gblur(layer):
gaus_filter = tf.expand_dims(tf.stack([gkern(),gkern(),gkern()],axis=2),axis=3)
return tf.nn.depthwise_conv2d(layer,gaus_filter,strides=[1,1,1],padding='SAME')
#1st first conv layer
conv1 = tf.layers.conv2d(input,filters=conv1_fmaps,kernel_size=conv1_ksize,strides=conv1_stride,padding=conv1_pad,activation=None,name="conv1")
#apply gaussian filter to the output features maps of the 1st conv layer
gauss_conv1 = gblur(conv1)
However,it's raising the following value errors: how to cope with is shape incompatibility problem?
ValueError: Dimensions must be equal,but are 32 and 3 for 'depthwise' (op: 'DepthwiseConv2dNative')
with input shapes: [?,32,32],[3,3,1.]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。