Сделайте ядро ​​свертки в Keras, используя выходные данные layer - PullRequest
0 голосов
/ 09 марта 2019

Как я могу создать ядро ​​надлежащего размера путем перекрестного произведения двух выходов моей сети, и тогда матрица (тензор) будет сверточным ядром на более позднем слое. т.е.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...