Пример #1
0
def test(epoch, loader):
    model.eval()

    decoder_class_losses = LossDict([decoder_class], "acoustic_model")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(loader):
        # Get data for the decoder class
        # Set to volatile so history isn't saved (i.e., not training time)
        feats = all_feats[0]
        targets = all_targets[0]
        if on_gpu:
            feats = feats.cuda()
            targets = targets.cuda()
        feats = Variable(feats, volatile=True)
        targets = Variable(targets, volatile=True)

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones, volatile=True)

        # Phone classifier testing

        # Forward pass through phone classifier
        log_probs = model.classify(feats)

        # Compute class loss and backward pass
        c_loss = class_loss(log_probs, phones)
        decoder_class_losses.add(decoder_class,
                                 {"phones_xent": c_loss.data[0]})

        batches_processed += 1

    return decoder_class_losses
Пример #2
0
def train(epoch):
    model.train()

    # Set up some bookkeeping on loss values
    decoder_class_losses = LossDict(decoder_classes, "end2end_phone_net")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(train_loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats)
            targets = Variable(targets)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones)

        # Phone classifier training
        optimizer.zero_grad()
        total_loss = 0.0

        feats = feat_dict["clean"]

        # Forward pass through phone classifier
        log_probs = model.classify(feats)

        # Compute class loss and backward pass
        c_loss = class_loss(log_probs, phones)
        total_loss += c_loss

        decoder_class_losses.add("clean", {"phones_xent": c_loss.data[0]})

        # Update generator
        total_loss.backward()
        optimizer.step()

        # Print updates, if any
        batches_processed += 1

        if batches_processed % log_interval == 0:
            print("Train epoch %d: [%d/%d (%.1f%%)]" %
                  (epoch, batches_processed, len(train_loader),
                   batches_processed / len(train_loader) * 100.0),
                  flush=True)
            print(decoder_class_losses, flush=True)
    return decoder_class_losses
Пример #3
0
def test(epoch, loader):
    model.eval()

    decoder_class_losses = LossDict(decoder_classes, "multitask_net")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            # Set to volatile so history isn't saved (i.e., not training time)
            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats, volatile=True)
            targets = Variable(targets, volatile=True)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones, volatile=True)

        # Test enhancement
        for source_class in decoder_classes:
            feats = feat_dict[source_class]
            targets = targets_dict["clean"]

            # Forward pass through just enhancement net
            enhanced_feats = model.enhance(feats)

            # Compute reconstruction loss
            r_loss = reconstruction_loss(enhanced_feats, targets)
            if source_class == "clean":
                decoder_class_losses.add(
                    source_class, {"reconstruction_loss": r_loss.data[0]})
            else:
                decoder_class_losses.add(source_class,
                                         {"enhancement_loss": r_loss.data[0]})

        # Test phone classifier (clean data only)
        # Forward pass enhanced feats through phone classifier
        feats = feat_dict["clean"]
        log_probs = model.classify(feats)

        # Compute class loss
        c_loss = class_loss(log_probs, phones)
        decoder_class_losses.add("clean", {"phones_xent": c_loss.data[0]})

        batches_processed += 1

    return decoder_class_losses
Пример #4
0
def train(epoch):
    model.train()

    # Set up some bookkeeping on loss values
    decoder_class_losses = LossDict([decoder_class], "acoustic_model")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(train_loader):
        # Get data for the decoder class
        feats = all_feats[0]
        targets = all_targets[0]
        if on_gpu:
            feats = feats.cuda()
            targets = targets.cuda()
        feats = Variable(feats)
        targets = Variable(targets)

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones)

        # Phone classifier training
        optimizer.zero_grad()

        # Forward pass through phone classifier
        log_probs = model.classify(feats)

        # Compute class loss and backward pass
        c_loss = class_loss(log_probs, phones)
        decoder_class_losses.add(decoder_class,
                                 {"phones_xent": c_loss.data[0]})

        # Update generator
        c_loss.backward()
        optimizer.step()

        # Print updates, if any
        batches_processed += 1

        if batches_processed % log_interval == 0:
            print("Train epoch %d: [%d/%d (%.1f%%)]" %
                  (epoch, batches_processed, len(train_loader),
                   batches_processed / len(train_loader) * 100.0),
                  flush=True)
            print(decoder_class_losses, flush=True)
    return decoder_class_losses
Пример #5
0
def test(epoch, loader):
    model.eval()

    decoder_class_losses = LossDict(decoder_classes, "end2end_phone_net")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            # Set to volatile so history isn't saved (i.e., not training time)
            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats, volatile=True)
            targets = Variable(targets, volatile=True)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones, volatile=True)

        # Phone classifier testing
        feats = feat_dict["clean"]

        # Forward pass through phone classifier
        log_probs = model.classify(feats)

        # Compute class loss
        c_loss = class_loss(log_probs, phones)
        decoder_class_losses.add("clean", {"phones_xent": c_loss.data[0]})

        batches_processed += 1

    return decoder_class_losses
Пример #6
0
def test(loader):
    model.eval()

    decoder_class_losses = LossDict(decoder_classes, "multitask_md")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            # Set to volatile so history isn't saved (i.e., not training time)
            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats, volatile=True)
            targets = Variable(targets, volatile=True)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones, volatile=True)
        
        # Test reconstruction/transformation
        for source_class in decoder_classes:
            for target_class in decoder_classes:
                feats = feat_dict[source_class]
                targets = targets_dict[target_class]
                recon_x = model.forward_decoder(feats, target_class)
                r_loss = reconstruction_loss(recon_x, targets)
                if target_class == source_class:
                    decoder_class_losses.add(source_class, {"reconstruction_loss": r_loss.data[0]})
                else:
                    decoder_class_losses.add(source_class, {"transformation_loss": r_loss.data[0]})

        # Test phone classifier on clean data
        feats = feat_dict["clean"]
        log_probs = model.classify(feats)
        c_loss = class_loss(log_probs, phones)
        decoder_class_losses.add("clean", {"phones_xent": c_loss.data[0]})
        
        batches_processed += 1

    return decoder_class_losses
Пример #7
0
def train(epoch):
    model.train()

    # Set up some bookkeeping on loss values
    decoder_class_losses = LossDict(decoder_classes, "enhancement_net")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets) in enumerate(train_loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats)
            targets = Variable(targets)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        optimizer.zero_grad()
        total_loss = 0.0

        # Step 1: reconstruction/clean->clean
        feats = feat_dict["clean"]
        targets = targets_dict["clean"]
        recon_x = model.forward(feats)
        r_loss = reconstruction_loss(recon_x, targets)
        total_loss += r_loss
        decoder_class_losses.add("clean",
                                 {"reconstruction_loss": r_loss.data[0]})

        # Step 2: enhancement/dirty->clean
        feats = feat_dict["dirty"]
        targets = targets_dict["clean"]
        recon_x = model.forward(feats)
        r_loss = reconstruction_loss(recon_x, targets)
        total_loss += r_loss
        decoder_class_losses.add("dirty", {"enhancement_loss": r_loss.data[0]})

        # Update generator
        total_loss.backward()
        optimizer.step()

        # Print updates, if any
        batches_processed += 1

        if batches_processed % log_interval == 0:
            print("Train epoch %d: [%d/%d (%.1f%%)]" %
                  (epoch, batches_processed, len(train_loader),
                   batches_processed / len(train_loader) * 100.0),
                  flush=True)
            print(decoder_class_losses, flush=True)
    return decoder_class_losses
Пример #8
0
def test(epoch, loader):
    model.eval()

    decoder_class_losses = LossDict(decoder_classes, denoiser=True)
    batches_processed = 0

    for batch_idx, (all_feats, all_targets) in enumerate(loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            # Set to volatile so history isn't saved (i.e., not training time)
            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats, volatile=True)
            targets = Variable(targets, volatile=True)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # STEP 1: Autoencoder testing

        if use_reconstruction:
            # PHASE 1: Backprop clean data through clean decoder (reconstruction)
            feats = feat_dict["clean"]
            targets = targets_dict["clean"]

            # Run features through same decoder
            recon_batch = model.forward_decoder(feats, "clean")
            r_loss = reconstruction_loss(recon_batch, targets)

            decoder_class_losses.add(
                "clean", {"autoencoding_recon_loss": r_loss.data[0]})

        if use_transformation:
            # PHASE 2: Backprop dirty data through clean decoder (denoising/transformation)
            feats = feat_dict["dirty"]
            targets_other = targets_dict["clean"]

            # Run features through other decoder
            translated_feats = model.forward_decoder(feats, "clean")
            r_loss = reconstruction_loss(translated_feats, targets_other)

            decoder_class_losses.add(
                "dirty", {"transformation_recon_loss": r_loss.data[0]})

        batches_processed += 1

    return decoder_class_losses
Пример #9
0
def test(loader):
    model.eval()

    decoder_class_losses = LossDict(decoder_classes, "enhancement_net")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets) in enumerate(loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            # Set to volatile so history isn't saved (i.e., not training time)
            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats, volatile=True)
            targets = Variable(targets, volatile=True)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # Step 1: reconstruction/clean->clean
        feats = feat_dict["clean"]
        targets = targets_dict["clean"]
        recon_x = model.forward(feats)
        r_loss = reconstruction_loss(recon_x, targets)
        decoder_class_losses.add("clean",
                                 {"reconstruction_loss": r_loss.data[0]})

        # Step 2: enhancement/dirty->clean
        feats = feat_dict["dirty"]
        targets = targets_dict["clean"]
        recon_x = model.forward(feats)
        r_loss = reconstruction_loss(recon_x, targets)
        decoder_class_losses.add("dirty", {"enhancement_loss": r_loss.data[0]})

        batches_processed += 1

    return decoder_class_losses
Пример #10
0
def test(loader):
    model.eval()

    decoder_class_losses = LossDict(decoder_classes, "enhancement_md")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets) in enumerate(loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            # Set to volatile so history isn't saved (i.e., not training time)
            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats, volatile=True)
            targets = Variable(targets, volatile=True)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        for source_class in decoder_classes:
            for target_class in decoder_classes:
                feats = feat_dict[source_class]
                targets = targets_dict[target_class]
                recon_x = model.forward_decoder(feats, target_class)
                r_loss = reconstruction_loss(recon_x, targets)
                if target_class == source_class:
                    decoder_class_losses.add(
                        source_class, {"reconstruction_loss": r_loss.data[0]})
                else:
                    decoder_class_losses.add(
                        source_class, {"transformation_loss": r_loss.data[0]})

        batches_processed += 1

    return decoder_class_losses
Пример #11
0
def train(epoch):
    model.train()

    # Set up some bookkeeping on loss values
    decoder_class_losses = LossDict(decoder_classes, "multitask_net")
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(train_loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats)
            targets = Variable(targets)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones)

        # Step 1: Phone classifier training (for clean data only)
        optimizer.zero_grad()
        feats = feat_dict["clean"]

        # Forward pass through classifier
        log_probs = model.classify(feats)

        # Compute class loss
        c_loss = class_loss(log_probs, phones)
        decoder_class_losses.add("clean", {"phones_xent": c_loss.data[0]})

        c_loss.backward()
        optimizer.step()

        # Step 2: Enhancement net training
        optimizer.zero_grad()
        total_loss = 0.0
        for source_class in decoder_classes:
            feats = feat_dict[source_class]
            targets = targets_dict["clean"]

            # Forward pass through just enhancement net
            enhanced_feats = model.enhance(feats)

            # Compute reconstruction loss
            r_loss = reconstruction_loss(enhanced_feats, targets)
            total_loss += r_loss

            if source_class == "clean":
                decoder_class_losses.add(
                    source_class, {"reconstruction_loss": r_loss.data[0]})
            else:
                decoder_class_losses.add(source_class,
                                         {"enhancement_loss": r_loss.data[0]})
        total_loss.backward()
        optimizer.step()

        # Print updates, if any
        batches_processed += 1

        if batches_processed % log_interval == 0:
            print("Train epoch %d: [%d/%d (%.1f%%)]" %
                  (epoch, batches_processed, len(train_loader),
                   batches_processed / len(train_loader) * 100.0),
                  flush=True)
            print(decoder_class_losses, flush=True)
    return decoder_class_losses
Пример #12
0
def train(epoch):
    model.train()

    # Set up some bookkeeping on loss values
    decoder_class_losses = LossDict(decoder_classes, e2e=True)
    batches_processed = 0

    for batch_idx, (all_feats, all_targets, phones) in enumerate(train_loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats)
            targets = Variable(targets)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # Set up phones
        if on_gpu:
            phones = phones.cuda()
        phones = Variable(phones)

        # Use one loss that is a sum of enhancement and phone losses,
        # so that the total loss is backprop'ed all at once
        total_loss = 0.0
        generator_optimizer.zero_grad()

        # STEP 1: Enhancement losses

        if use_reconstruction:
            # PHASE 1: Backprop clean data through same decoder (reconstruction)
            feats = feat_dict["clean"]
            targets = targets_dict["clean"]

            # Forward pass through same decoder
            recon_batch = model.forward_decoder(feats, "clean")

            # Compute reconstruction loss and backward pass
            r_loss = reconstruction_loss(recon_batch, targets)
            total_loss += r_loss

            decoder_class_losses.add(
                "clean", {"autoencoding_recon_loss": r_loss.data[0]})

        if use_transformation:
            # PHASE 2: Backprop dirty data through clean decoder (denoising/transformation)
            feats = feat_dict["dirty"]
            targets_other = targets_dict["clean"]

            # Forward pass through other decoder
            transformed_feats = model.forward_decoder(feats, "clean")

            # Compute reconstruction loss and backward pass
            r_loss = reconstruction_loss(transformed_feats, targets_other)
            total_loss += r_loss

            decoder_class_losses.add(
                "dirty", {"transformation_recon_loss": r_loss.data[0]})

        # STEP 2: Phone classifier training

        for source_class in decoder_classes:
            feats = feat_dict[source_class]

            # Forward pass through phone classifier
            log_probs = model.forward_phones(feats)

            # Compute class loss and backward pass
            c_loss = class_loss(log_probs, phones)
            total_loss += c_loss

            decoder_class_losses.add(source_class,
                                     {"phone_loss": c_loss.data[0]})

        # Update generator
        total_loss.backward()
        generator_optimizer.step()

        # Print updates, if any
        batches_processed += 1

        if batches_processed % log_interval == 0:
            print("Train epoch %d: [%d/%d (%.1f%%)]" %
                  (epoch, batches_processed, len(train_loader),
                   batches_processed / len(train_loader) * 100.0),
                  flush=True)
            print(decoder_class_losses, flush=True)
    return decoder_class_losses
Пример #13
0
def train(epoch):
    model.train()

    # Set up some bookkeeping on loss values
    decoder_class_losses = LossDict(decoder_classes, denoiser=True)
    batches_processed = 0

    for batch_idx, (all_feats, all_targets) in enumerate(training_loader):
        # Get data for each decoder class
        feat_dict = dict()
        targets_dict = dict()
        for i in range(len(all_feats)):
            decoder_class = decoder_classes[i]

            feats = all_feats[i]
            targets = all_targets[i]
            if on_gpu:
                feats = feats.cuda()
                targets = targets.cuda()
            feats = Variable(feats)
            targets = Variable(targets)

            feat_dict[decoder_class] = feats
            targets_dict[decoder_class] = targets

        # STEP 1: Generator training

        if use_reconstruction:
            # PHASE 1: Backprop clean data through same decoder (reconstruction)
            generator_optimizer.zero_grad()

            feats = feat_dict["clean"]
            targets = targets_dict["clean"]

            # Forward pass through same decoder
            recon_batch = model.forward_decoder(feats, "clean")

            # Compute reconstruction loss and backward pass
            r_loss = reconstruction_loss(recon_batch, targets)
            r_loss.backward()

            decoder_class_losses.add(
                "clean", {"autoencoding_recon_loss": r_loss.data[0]})

            # Update generator
            generator_optimizer.step()

        if use_transformation:
            # PHASE 2: Backprop dirty data through clean decoder (denoising/transformation)
            generator_optimizer.zero_grad()

            feats = feat_dict["dirty"]
            targets_other = targets_dict["clean"]

            # Forward pass through other decoder
            transformed_feats = model.forward_decoder(feats, "clean")

            # Compute reconstruction loss and backward pass
            r_loss = reconstruction_loss(transformed_feats, targets_other)
            r_loss.backward()

            decoder_class_losses.add(
                "dirty", {"transformation_recon_loss": r_loss.data[0]})

            # Update generator
            generator_optimizer.step()

        # Print updates, if any
        batches_processed += 1

        if batches_processed % log_interval == 0:
            print("Train epoch %d: [%d/%d (%.1f%%)]" %
                  (epoch, batches_processed, len(training_loader),
                   batches_processed / len(training_loader) * 100.0),
                  flush=True)
            print(decoder_class_losses, flush=True)
    return decoder_class_losses