Как я могу создать ядро надлежащего размера путем перекрестного произведения двух выходов моей сети, и тогда матрица (тензор) будет сверточным ядром на более позднем слое. т.е.
def CrossMult(inputs):
x0, x1 = inputs
#x0 = tf.keras.backend.transpose(x0)
x1 = tf.keras.backend.transpose(x1)
# you apply layer operations to layers
C = keras.layers.dot(axis=-1)(x0,x1)
return C
def Conv1d(inputs):
x, kernel = inputs
Recon = keras.backend.conv1d(x, kernel, strides=1, padding='same',
dilation_rate=1)
return Recon
input0 = input(...
x0 = ConvLayer2(x0)
x1 = ConvLayer2(x1)
layer_conv_kernel = Lambda(Conv1d)
layer_cross_prod = Lambda(CrossMult)
#kernel = keras.layers.Multiply()([x0, x1])
Kernel = layer_cross_prod([x0, x1])
#The Kernelis the cross-convolution between two output vectors and this matrix will be the convolutional kernel in the later layer.
Recon = layer_conv_kernel([input0, kKernel])
# This line raises an error!
# the size of Kernel will be (None, M,N)(error)
Recon = keras.backend.conv1d(input1, Kernel, strides=1, padding='same', dilation_rate=1)
# This line raises another error!
Recon = Conv1D(1, width, strides=1, activation='relu', padding='same')(Recon)