402. OpenVaccine: COVID-19 mRNA Vaccine Degradation Prediction | stanford-covid-vaccine
在比赛结束前一周,我们就在排行榜(LB)第二名使用这种轻量级架构。它的速度比 @mrkmakr 分享的方案快大约 2 倍甚至 3 倍。顺便提一下,@mrkmakr 当时确实公开了进入金牌区的秘密。
考虑到序列位置之间的依赖关系,我们如何将信息从一个序列位置传递到另一个位置?
将信息从位置 i 传递到 j

如上图所示,我们的模型通过 3 个步骤实现这一点:
最后,通过双向 RNN 将信息推向更远的范围。
这是关于该解决方案的笔记本,请注意这是一个简化版本,主要移除了一些融合和优化部分。
https://www.kaggle.com/kingychiu/mrna-base-degradation-keras-cnn-gcn-rnn
卷积步骤 (1+2+3),其中 GraphConv 仅仅是一个点积,用于计算可学习权重 + 过滤器,代码参考自:
Spektral GraphConv 源码链接
def conv_block(x):
conv = tf.keras.layers.Conv1D(hidden_dim*2, 5,
padding='same',
activation='tanh')(x)
gcn = GraphConv(
graph_channels,
)([conv, As_in])
gcn_2 = GraphConv(
graph_channels,
)([conv, bpp_inputs])
gcn = tf.keras.layers.Conv1D(graph_channels, 5,
padding='same',
activation='tanh',
)(gcn)
conv = tf.keras.layers.Concatenate()([conv, gcn, gcn_2])
conv = tf.keras.layers.Activation("relu")(conv)
conv = tf.keras.layers.SpatialDropout1D(0.1)(conv)
return conv
结合 RNN 的代码:
hidden = conv_block(reshaped)
hidden = gru_layer(hidden_dim, dropout)(hidden)
hidden = conv_block(hidden)
hidden = gru_layer(hidden_dim, dropout)(hidden)