gpt4 book ai didi

tensorflow - TensorFlow conv2d 内核的强制对称

转载 作者:行者123 更新时间:2023-12-03 16:28:31 24 4
gpt4 key购买 nike

我想强制变量内的权重对称。我真的想要一个近似的圆对称。但是,我可以想象行或列强制对称。

目标是通过减少自由变量的数量来减少训练时间。我知道我的问题需要对称数组,但我可能想要同时包含对称变量和“自由”变量。我现在正在使用 conv2d,所以我相信我需要继续使用它。

最佳答案

这是一个函数,它创建一个关于其中心行上的反射对称的内核:

def SymmetricKernels(height,width,in_channels,out_channels,name=None):
half_kernels = tf.Variable(initial_value=tf.random_normal([(height+1)//2,width,in_channels,out_channels]))
half_kernels_reversed = tf.reverse(half_kernels[:(height//2),:,:,:],[0])
kernels = tf.concat([half_kernels,half_kernels_reversed],axis=0,name=name)
return kernels

用法示例:

w = SymmetricKernels(5,5,1,1)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
w_ = sess.run(w)
w_[:,:,0,0]
# output:
# [[-1.299 -1.835 -1.188 0.093 -1.736]
# [-1.426 -2.087 0.434 0.223 -0.65 ]
# [-0.217 -0.802 -0.892 -0.229 1.383]
# [-1.426 -2.087 0.434 0.223 -0.65 ]
# [-1.299 -1.835 -1.188 0.093 -1.736]]

这个想法是使用 tf.Variable()仅创建内核的上半部分变量 ( half_kernels ),然后将对称内核作为上半部分及其反射(reflect)版本的串联形成。

这个想法可以扩展到创建具有左右对称和上下对称的内核。

关于tensorflow - TensorFlow conv2d 内核的强制对称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44730763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com