forward_two_layers()を実装しよう
forward_two_layers()を実装しよう
おかしな点などないか,またどのように実装すればいいのか見よう
基本はBEATs.pyのextract_features()の通りに書いてあるようだが,少し異なる部分がある
不要なのだろうか?
他にも色々ありそう
一旦切り上げ
code: two_layers.py
def forward_two_layers(self, x, start_layer=0):
"""
入力xに対して、TransformerEncoderのstart_layerから2層分の出力をまとめて返す
"""
# BEATsの前処理
fbank = self.model.preprocess(x)
features = fbank.unsqueeze(1)
features = self.model.patch_embedding(features)
features = features.reshape(features.shape0, features.shape1, -1) features = features.transpose(1, 2)
features = self.model.layer_norm(features)
if self.model.post_extract_proj is not None:
features = self.model.post_extract_proj(features)
x = self.model.dropout_input(features)
# TransformerEncoderのlayer_resultsを取得
_, layer_results = self.model.encoder(x, padding_mask=None)
# 2層分の出力をまとめて返す
if start_layer + 1 < len(layer_results):
else:
return out