Интерпретация пользовательского слоя для линейной комбинации встроенных последовательностей - PullRequest
0 голосов
/ 12 мая 2019

Модель, описанная в статье На пути к машинному проектированию белков имеет пользовательский слой, который транспонирует матрицу 238 x 15 встроенных кодов в одно горячее состояние (матрица представляет аминокислотный остаток в каждой точке в последовательность белка длиной 238) и берет точечное произведение с использованием обучаемой матрицы весов 238 x 5, чтобы получить 15x5 «последовательность составных аминокислот».

В статье говорится, что каждый из столбцов в матрице 15 x 5 представляет определенную группу аминокислот. Я реализовал это в keras и мне интересно, как бы я интерпретировал матрицу 15x5 и отобразил значения в столбцах на аминокислоты в исходной последовательности.

Например: я хотел бы предоставить некоторый код, который будет проверять матрицу составных аминокислот 15 x 5, а затем показывать пользователю положение и букву сгруппированных аминокислот.

class CompositeResidue(Layer):
    '''
    This is the "Composite Residue" layer.
    The input sets the number of residues to group.
    '''
    def __init__(self, Ncomp, **kwargs):

        self.Ncomp = Ncomp
        super(CompositeResidue, self).__init__(**kwargs)

    def build(self, input_shape):
        # Create a trainable weight variable for this layer.
        #input shape = 15 x 238
        #self.Ncomp = 5
        self.kernel = self.add_weight(name='kernel', 
                                      shape=(input_shape[1], self.Ncomp),
                                      initializer='uniform',
                                      trainable=True)
        super(CompositeResidue, self).build(input_shape)  # Be sure to call this at the end

    def call(self, x):
        return K.dot(K.permute_dimensions(x, (0,2,1)), self.kernel)

    def compute_output_shape(self, input_shape):
        return (input_shape[0], input_shape[2], self.Ncomp)
        #output shape = 15x5
    def get_config(self):

        base_config = super(CompositeResidue, self).get_config()
        base_config['Ncomp'] = self.Ncomp
        return base_config
...