解释定制层以实现嵌入序列的线性组合

时间:2019-05-12 15:02:53

标签: python keras neural-network dot-product spatial-pooling

论文Towards machine-guided design of proteins中描述的模型具有一个自定义层,该层转置了嵌入嵌入式一键编码的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

0 个答案:

没有答案