该章节介绍VITGAN对抗生成网络中,SLN自调制 部分的代码实现。
目录(文章发布后会补上链接):
- 网络结构简介
- Mapping NetWork 实现
- PositionalEmbedding 实现
- MLP 实现
- MSA多头注意力 实现
- SLN自调制 实现
- CoordinatesPositionalEmbedding 实现
- ModulatedLinear 实现
- Siren 实现
- Generator生成器 实现
- PatchEmbedding 实现
- ISN 实现
- Discriminator鉴别器 实现
- VITGAN 实现
SLN自调制 简介
SLN自调制 是用于连接w权重到Transformer Encoder,对应图中 A与Norm部分。
代码实现
import tensorflow as tf
class SLN(tf.keras.layers.Layer):
def __init__(self, d_model):
super().__init__()
self.gamma = tf.keras.layers.Dense(d_model, use_bias=False)
self.beta = tf.keras.layers.Dense(d_model, use_bias=False)
self.ln = tf.keras.layers.LayerNormalization(
axis=-1,
epsilon=1e-6,
center=False,
scale=False,
)
def call(self, h, w, training):
x = self.gamma(w) * self.ln(h, training=training) * self.beta(w)
return x
if __name__ == "__main__":
layer = SLN(128)
h = tf.random.uniform([2,5,128], dtype=tf.float32)
w = tf.random.uniform([2,5,128], dtype=tf.float32)
o1 = layer(h, w, training=True)
tf.print('o1:', o1)