如何解决将tf.keras.layer输出与tf.Variable结合起来用于卷积滤波器
我正在使用tf.keras构造一个自动编码器,该编码器除了使用输入图像之外还使用辅助信息(例如类标签)来执行更好的重构。那是目标,但是我对能够实现这种方法并提高我的张量流/ keras能力更感兴趣。
网络通过添加依赖于辅助变量的比例(乘数)和沿每个输出滤波器维度移动(相加值)来利用此辅助信息。例如,如果对卷积使用32个滤波器,则将具有32个比例值和32个移位值(与滤波器大小nxn或输入通道数无关)。
请注意,卷积滤波器以及比例和移位都是由网络学习的,通常是这样做的。因为我想对卷积滤波器权重本身应用此比例和移位变换,所以我需要能够通过缩放/移位来访问和修改滤波器权重。我相信我必须使用tf.nn.conv2d
来输入实际的过滤器权重,而不是tf.keras.layers.Conv2D
来使用过滤器的数量和尺寸。
我从下面的代码开始,但是得到了RuntimeError
,这可能是因为我混合了tf.keras.layers
和tf.Variable
的输出。但是,我不确定如何解决此问题以解决我提出的问题。
input_img = layers.Input(shape=(28,28,1))
label = layers.Input(shape=(10,)) # auxiliary information can be label or other info
num_filters = 32
shift = layers.Dense(num_filters,activation=None,use_bias=False)(label) # additive
scale = layers.Dense(num_filters,use_bias=False)(label) # multiplier
filters = tf.Variable(tf.random.normal([3,3,1,32])) # specify convolutional filters for tf.nn.conv2d
filters_shifted = layers.Multiply()([filters,scale])
filters_scaled = layers.Add()([filters_shifted,shift])
conv = tf.nn.conv2d(input_img,filters_scaled,strides=2,padding='same')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。