Модель, описанная в статье На пути к машинному проектированию белков имеет пользовательский слой, который транспонирует матрицу 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