Example #1
0
def train(X,
          y,
          num_epochs,
          train_fn,
          val_fn=None,
          train_iterator=None,
          validation_iterator=None):
    if train_iterator is None:
        train_iterator = SpectTrainBatchIterator(100, 10, config)
    if validation_iterator is None:
        validation_iterator = SpectValidBatchIterator(100, 10, config)
    if val_fn is not None:
        train_splitter = sts.SpeakerTrainSplit(eval_size=0.25, sentences=8)
        X_train, X_valid, y_train, y_valid = train_splitter(X, y)
    else:
        X_train = X
        y_train = y

    margin = 2

    print("Start training")
    confusion = analytics.ConfusionMatrix(len(set(y)))

    theano.printing.pydotprint(train_fn,
                               outfile='/data/test.svg',
                               format='svg')
    print('printed network')
    for epoch in range(num_epochs):
        start_time = time.time()

        # Training
        train_err = 0
        train_batches = 0
        for Xb, yb in train_iterator.iterate(X_train, y_train):
            train_err += train_fn(Xb, yb)
            train_batches += 1

        # Validation
        if val_fn is not None:
            val_err = 0
            val_batches = 0
            for Xb, yb in validation_iterator.iterate(X_valid, y_valid):
                err, class_predictions = val_fn(Xb, yb)
                val_err += err
                confusion.add_predictions(yb, class_predictions)
                val_batches += 1

            accs = confusion.calculate_accuracies()
            confusion.mat.fill(0)

        print("Epoch {} of {} took {:.3f}s".format(epoch + 1, num_epochs,
                                                   time.time() - start_time))
        print("  training loss:\t\t{:.6f}".format(train_err / train_batches))

        if val_fn is not None:
            print("  validation loss:\t\t{:.6f}".format(val_err / val_batches))
            print("  validation accuracy:\t\t{:.2f} %".format(accs.sum() /
                                                              len(accs) * 100))

        sys.stdout.flush()
Example #2
0
    def create_train_data(self):
        with open(get_speaker_pickle(self.training_data), 'rb') as f:
            (X, y, speaker_names) = pickle.load(f)

            splitter = sts.SpeakerTrainSplit(0.2, 10)
            X_t, X_v, y_t, y_v = splitter(X, y)

        return X_t, y_t, X_v, y_v
Example #3
0
 def _split_train_val_data(self, X, y):
     splitter = sts.SpeakerTrainSplit(0.2)
     X_t, X_v, y_t, y_v = splitter(X, y)
     return X_t, y_t, X_v, y_v