我编写了一个自定义转换函数,需要输入内核和偏差,然后使用Keras.layers.Lambda调用此函数。我的问题是输入x是5D张量而内核和偏差不是,但是我必须使用TimeDistributed层来包装这个Lambda层,所以我该怎么办? E.g。
def my_conv(input_var):
inputs, input_kernel, input_bias = input_var
activation = activation.get("sigmod")
x = K.conv2d(inputs, input_kernel, strides=1)
x = K.bias_add(x, input_bias)
return activation(x)
def my_conv_shape(input_shape):
input_shape, kernel_shape, bias_shape = input_shape
return input_shape[:3] + bias_shape[-1:]
在另一个功能中我使用它:
def custom_conv(x, kernel, bias):
"""x: [batch_size, max_num, height, width, channel]
kernel: [size, size, input_dim, filters]
bias: [filers]
"""
x = KL.TimeDistributed(KL.Lambda(my_conv, output_shape=tmy_conv_shape), name="my_conv")([x, kernel, bias])
但我觉得这样做不行。