gpt4 book ai didi

python - 如何在 Keras 中试验自定义二维卷积核?

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:38 25 4
gpt4 key购买 nike

kernel_size=3 的默认 Conv2D 层中,其中一个过滤器的切片权重可以这样命名:

A B C
D E F
G H I

像这样使用 kernel_size=5:

A B C D E
F G H I J
K L M N O
P Q R S T
U V W X Y

现在我想构建(并训练/测试)一个基于卷积层和内核的模型:

A A B C C
A A B C C
D D E F F
G G H I I
G G H I I

怎么可能执行这样的custom layer看起来像?

最佳答案

大概是这样的?

class CustomConv2D(Layer):
def __init__(self, filters, **kwargs):
self.filters = filters
self.kernel_size = (3, 3)
super(CustomConv2D, self).__init__(**kwargs)

def build(self, input_shape):
# only have a 3x3 kernel
shape = self.kernel_size + (input_shape[-1], self.filters)
self.kernel = self.add_weight(name='kernel', shape=shape,
initializer='glorot_uniform')
super(CustomConv2D, self).build(input_shape)

def call(self, x):
# duplicate rows 0 and 2
dup_rows = K.stack([self.kernel[0]]*2 + [self.kernel[1]] + [self.kernel[2]]*2, axis=0)
# duplicate cols 0 and 2
dup_cols = K.stack([dup_rows[:,0]]*2 + [dup_rows[:,1]] + [dup_rows[:,2]]*2, axis=1)
# having a 5x5 kernel now
return K.conv2d(x, dup_cols)

def compute_output_shape(self, input_shape):
return input_shape[:-1] + (self.filters,)

诀窍是在 3x3 内核中简单地为每个过滤器存储 9 个权重(硬编码,您可能想要概括它)并复制第一行和最后一行和列以使其成为您想要的 5x5 内核.然后这个内核被传递给 K.conv2d() 就像在 original Conv2d implementation 中一样.

我测试了它,它似乎可以正常工作。您可能想要添加其他参数,如填充、偏置等。

关于python - 如何在 Keras 中试验自定义二维卷积核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093950/

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