gpt4 book ai didi

tensorflow - 如何创建一个 Keras 层来进行 4D 卷积 (Conv4D)?

转载 作者:行者123 更新时间:2023-12-05 02:08:33 25 4
gpt4 key购买 nike

看起来 tf.nn.convolution 应该可以进行 4D 卷积,但我一直未能成功创建 Keras 层来使用此功能。

我已经尝试使用 Keras Lambda 层来包装 tf.nn.convolution 函数,但也许其他人有更好的主意?

我想利用数据的高维结构,因此 reshape 可能无法捕捉数据集的性质。

最佳答案

super 酷的问题。

这需要一个自定义层(具有可训练的参数)。
以下接受任意数量的维度,您可以通过 kernel_size 进行控制。

class Conv(Layer):
def __init__(self, filters, kernel_size, padding='VALID', **kwargs):
self.filters = filters
self.kernel_size = kernel_size #must be a tuple!!!!
self.padding=padding

super(Conv, self).__init__(**kwargs)

#using channels last!!!
def build(self, input_shape):
spatialDims = len(self.kernel_size)
allDims = len(input_shape)
assert allDims == spatialDims + 2 #spatial dimensions + batch size + channels

kernelShape = self.kernel_size + (input_shape[-1], self.filters)
#(spatial1, spatial2,...., spatialN, input_channels, output_channels)

biasShape = tuple(1 for _ in range(allDims-1)) + (self.filters,)


self.kernel = self.add_weight(name='kernel',
shape=kernelShape
initializer='uniform',
trainable=True)
self.bias = self.add_weight(name='bias',
shape = biasShape,
initializer='zeros',
trainable=True)
self.built = True

def call(self, inputs):
results = tf.nn.convolution(inputs, self.kernel, padding=self.padding)
return results + self.bias

def compute_output_shape(self, input_shape)
sizes = input_shape[1:-1]

if self.padding='VALID' or self.padding='valid':
sizes = [s - kSize + 1 for s, kSize in zip(sizes, self.kernel_size)]

return input_shape[:1] + sizes + (self.filters,)

关于tensorflow - 如何创建一个 Keras 层来进行 4D 卷积 (Conv4D)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60782034/

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