Skip to content

Commit f06efbd

Browse files
committed
dirty fix to start exp
1 parent e722404 commit f06efbd

6 files changed

Lines changed: 96 additions & 71 deletions

File tree

recipes/LibriSpeech/ASR/transformer/experiment_dual_schedulers.py

Lines changed: 71 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -284,61 +284,74 @@ def on_evaluate_start(self, max_key=None, min_key=None):
284284
sys.path.append(os.path.dirname(os.path.dirname(current_dir)))
285285
from librispeech_prepare import prepare_librispeech # noqa E402
286286

287-
# Load hyperparameters file with command-line overrides
288-
hparams_file, overrides = sb.parse_arguments(sys.argv[1:])
289-
with open(hparams_file) as fin:
290-
hparams = sb.load_extended_yaml(fin, overrides)
291-
292-
# Create experiment directory
293-
sb.create_experiment_directory(
294-
experiment_directory=hparams["output_folder"],
295-
hyperparams_to_save=hparams_file,
296-
overrides=overrides,
297-
)
298-
299-
# Prepare data
300-
prepare_librispeech(
301-
data_folder=hparams["data_folder"],
302-
splits=hparams["train_splits"]
303-
+ [hparams["dev_split"], "test-clean", "test-other"],
304-
merge_lst=hparams["train_splits"],
305-
merge_name=hparams["csv_train"],
306-
save_folder=hparams["data_folder"],
307-
)
308-
309-
# Creating tokenizer must be done after preparation
310-
tokenizer = hparams["tokenizer"]()
311-
312-
# Load index2label dict for decoding
313-
train_set = hparams["train_loader"]()
314-
valid_set = hparams["valid_loader"]()
315-
test_clean_set = hparams["test_clean_loader"]()
316-
test_other_set = hparams["test_other_loader"]()
317-
ind2lab = hparams["test_other_loader"].label_dict["wrd"]["index2lab"]
318-
hparams["ind2lab"] = ind2lab
319-
hparams["tokenizer"] = tokenizer
320-
321-
# Brain class initialization
322-
asr_brain = ASR(
323-
modules=hparams["model"],
324-
opt_class=hparams["optimizer"],
325-
hparams=hparams,
326-
checkpointer=hparams["checkpointer"],
327-
)
328-
329-
asr_brain.load_tokenizer()
330-
if hasattr(asr_brain.hparams, "lm_ckpt_file"):
331-
asr_brain.load_lm()
332-
333-
# Training
334-
asr_brain.fit(asr_brain.hparams.epoch_counter, train_set, valid_set)
335-
336-
# Test
337-
asr_brain.hparams.wer_file = (
338-
hparams["output_folder"] + "/wer_test_clean.txt"
339-
)
340-
asr_brain.evaluate(test_clean_set, max_key="ACC")
341-
asr_brain.hparams.wer_file = (
342-
hparams["output_folder"] + "/wer_test_other.txt"
343-
)
344-
asr_brain.evaluate(test_other_set, max_key="ACC")
287+
while True:
288+
try:
289+
# Load hyperparameters file with command-line overrides
290+
hparams_file, overrides = sb.parse_arguments(sys.argv[1:])
291+
with open(hparams_file) as fin:
292+
hparams = sb.load_extended_yaml(fin, overrides)
293+
294+
# Create experiment directory
295+
sb.create_experiment_directory(
296+
experiment_directory=hparams["output_folder"],
297+
hyperparams_to_save=hparams_file,
298+
overrides=overrides,
299+
)
300+
301+
# Prepare data
302+
prepare_librispeech(
303+
data_folder=hparams["data_folder"],
304+
splits=hparams["train_splits"]
305+
+ [hparams["dev_split"], "test-clean", "test-other"],
306+
merge_lst=hparams["train_splits"],
307+
merge_name=hparams["csv_train"],
308+
save_folder=hparams["data_folder"],
309+
)
310+
311+
# Creating tokenizer must be done after preparation
312+
tokenizer = hparams["tokenizer"]()
313+
314+
# Load index2label dict for decoding
315+
train_set = hparams["train_loader"]()
316+
valid_set = hparams["valid_loader"]()
317+
test_clean_set = hparams["test_clean_loader"]()
318+
test_other_set = hparams["test_other_loader"]()
319+
ind2lab = hparams["test_other_loader"].label_dict["wrd"]["index2lab"]
320+
hparams["ind2lab"] = ind2lab
321+
hparams["tokenizer"] = tokenizer
322+
323+
324+
# Brain class initialization
325+
asr_brain = ASR(
326+
modules=hparams["model"],
327+
opt_class=hparams["optimizer"],
328+
hparams=hparams,
329+
checkpointer=hparams["checkpointer"],
330+
)
331+
332+
asr_brain.load_tokenizer()
333+
if hasattr(asr_brain.hparams, "lm_ckpt_file"):
334+
asr_brain.load_lm()
335+
336+
# Training
337+
asr_brain.fit(asr_brain.hparams.epoch_counter, train_set, valid_set)
338+
339+
# Test
340+
asr_brain.hparams.wer_file = (
341+
hparams["output_folder"] + "/wer_test_clean.txt"
342+
)
343+
asr_brain.evaluate(test_clean_set, max_key="ACC")
344+
asr_brain.hparams.wer_file = (
345+
hparams["output_folder"] + "/wer_test_other.txt"
346+
)
347+
asr_brain.evaluate(test_other_set, max_key="ACC")
348+
349+
except KeyboardInterrupt:
350+
sys.exit()
351+
352+
except:
353+
msg = "rand {} failed with pkl I/O, retrying...."
354+
print(msg)
355+
356+
357+

speechbrain/data_io/data_io.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ def get_dataloader(self, sampler=None):
206206
self.dataset,
207207
batch_size=self.batch_size,
208208
shuffle=self.shuffle if sampler is None else False,
209-
pin_memory=(sampler is not None),
209+
pin_memory=False,
210210
drop_last=self.drop_last,
211211
num_workers=self.num_workers,
212212
collate_fn=self.batch_creation,

speechbrain/decoders/ctc.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ def __init__(self, x, xlens, blank, eos, margin=0):
4747
)
4848
# Pad the rest of posteriors in the batch
4949
# TODO(takaaki-hori): need a better way without for-loops
50-
# for i, l in enumerate(xlens):
51-
# if l < self.input_length:
52-
# x[i, l:, :] = self.logzero
53-
# x[i, l:, blank] = 0
54-
x[:, :, blank] = 0
50+
for i, l in enumerate(xlens):
51+
if l < self.input_length:
52+
x[i, l:, :] = self.logzero
53+
x[i, l:, blank] = 0
54+
5555
# Reshape input x
5656
xn = x.transpose(0, 1) # (B, T, O) -> (T, B, O)
5757
xb = xn[:, :, self.blank].unsqueeze(2).expand(-1, -1, self.odim)

speechbrain/decoders/seq2seq.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import numpy as np
1010

1111
import speechbrain as sb
12-
from speechbrain.decoders.ctc import CTCPrefixScorer
12+
from speechbrain.decoders.ctc import CTCPrefixScorer, CTCPrefixScoreTH
1313

1414

1515
class S2SBaseSearcher(torch.nn.Module):
@@ -538,11 +538,19 @@ def forward(self, enc_states, wav_len): # noqa: C901
538538
if self.ctc_weight > 0:
539539
# (batch_size * beam_size, L, vocab_size)
540540
ctc_outputs = self.ctc_forward_step(enc_states)
541-
ctc_scorer = CTCPrefixScorer(
541+
# ctc_scorer = CTCPrefixScorer(
542+
# ctc_outputs,
543+
# enc_lens,
544+
# batch_size,
545+
# self.beam_size,
546+
# 0,
547+
# self.eos_index,
548+
# )
549+
ctc_scorer = CTCPrefixScoreTH(
542550
ctc_outputs,
543551
enc_lens,
544-
batch_size,
545-
self.beam_size,
552+
# batch_size,
553+
# self.beam_size,
546554
0,
547555
self.eos_index,
548556
)
@@ -626,7 +634,8 @@ def forward(self, enc_states, wav_len): # noqa: C901
626634

627635
# adding CTC scores to log_prob if ctc_weight > 0
628636
if self.ctc_weight > 0:
629-
g = alived_seq
637+
# g = alived_seq
638+
g = memory
630639
# block blank token
631640
log_probs[:, self.bos_index] = self.minus_inf
632641
if self.ctc_weight != 1.0:

speechbrain/lobes/models/transformer/TransformerASR.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ def forward(
140140
memory=encoder_out,
141141
tgt_mask=tgt_mask,
142142
tgt_key_padding_mask=tgt_key_padding_mask,
143+
# memory_key_padding_mask=src_key_padding_mask,
143144
)
144145

145146
return encoder_out, decoder_out

speechbrain/processing/features.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,7 @@ def __init__(
956956
norm_type="global",
957957
avg_factor=None,
958958
requires_grad=False,
959+
update_until_epoch=3,
959960
):
960961
super().__init__()
961962
self.mean_norm = mean_norm
@@ -972,8 +973,9 @@ def __init__(
972973
self.count = 0
973974
self.eps = 1e-10
974975
self.device_inp = torch.device("cpu")
976+
self.update_until_epoch = update_until_epoch
975977

976-
def forward(self, x, lengths, spk_ids=torch.tensor([])):
978+
def forward(self, x, lengths, spk_ids=torch.tensor([]), epoch=0):
977979
"""Returns the tensor with the sourrounding context.
978980
979981
Arguments
@@ -1059,7 +1061,7 @@ def forward(self, x, lengths, spk_ids=torch.tensor([])):
10591061
self.glob_mean = current_mean
10601062
self.glob_std = current_std
10611063

1062-
else:
1064+
elif epoch < self.update_until_epoch:
10631065
if self.avg_factor is None:
10641066
self.weight = 1 / (self.count + 1)
10651067
else:

0 commit comments

Comments
 (0)