Я пишу пользовательскую функцию conv, которая должна вводить ядро и смещение, затем использую Keras.layers.Lambda для вызова этой функции. Моя проблема в том, что входной x является 5D-тензором, а ядро и смещение - нет, но я должен использовать слой TimeDistributed, чтобы обернуть этот лямбда-слой, так как я могу это сделать? Э.Г.
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])
но я думаю, что таким образом не должно работать.