diff --git a/.gitignore b/.gitignore index cf6311a989..b9bc19d490 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ build/ *.DS_Store .vscode/* +.idea +logs +wandb +.python-version diff --git a/magenta/models/coconet/.gitignore b/magenta/models/coconet/.gitignore new file mode 100644 index 0000000000..582ee332d7 --- /dev/null +++ b/magenta/models/coconet/.gitignore @@ -0,0 +1 @@ +coconet_checkpoint diff --git a/magenta/models/coconet/coconet_evaluate.py b/magenta/models/coconet/coconet_evaluate.py index 6003e9c7bf..5daffc8e58 100644 --- a/magenta/models/coconet/coconet_evaluate.py +++ b/magenta/models/coconet/coconet_evaluate.py @@ -19,10 +19,10 @@ import os -from magenta.models.coconet import lib_data -from magenta.models.coconet import lib_evaluation -from magenta.models.coconet import lib_graph -from magenta.models.coconet import lib_util +import lib_data +import lib_evaluation +import lib_graph +import lib_util import numpy as np import tensorflow as tf @@ -38,16 +38,16 @@ flags.DEFINE_string('fold_index', None, 'Optionally, index of particular data point in fold to ' 'evaluate.') -flags.DEFINE_string('unit', None, 'Note or frame or example.') +flags.DEFINE_string('unit', 'note', 'Note or frame or example.') flags.DEFINE_integer('ensemble_size', 5, 'Number of ensemble members to average.') -flags.DEFINE_bool('chronological', False, +flags.DEFINE_bool('chronological', True, 'Indicates evaluation should proceed in chronological order.') flags.DEFINE_string('checkpoint', None, 'Path to checkpoint directory.') flags.DEFINE_string('sample_npy_path', None, 'Path to samples to be evaluated.') -EVAL_SUBDIR = 'eval_stats' +EVAL_SUBDIR = 'eval' def main(unused_argv): @@ -132,6 +132,7 @@ def evaluate_paths(paths, evaluator, unused_hparams, eval_logdir): def get_fold_pianorolls(fold, hparams): dataset = lib_data.get_dataset(FLAGS.data_dir, hparams, fold) pianorolls = dataset.get_pianorolls() + pianorolls[0:2] tf.logging.info('Retrieving pianorolls from %s set of %s dataset.', fold, hparams.dataset) print_statistics(pianorolls) diff --git a/magenta/models/coconet/coconet_sample.py b/magenta/models/coconet/coconet_sample.py index b9f1bf59ee..0722e1e2ad 100644 --- a/magenta/models/coconet/coconet_sample.py +++ b/magenta/models/coconet/coconet_sample.py @@ -23,13 +23,13 @@ import re import time -from magenta.models.coconet import lib_graph -from magenta.models.coconet import lib_logging -from magenta.models.coconet import lib_mask -from magenta.models.coconet import lib_pianoroll -from magenta.models.coconet import lib_sampling -from magenta.models.coconet import lib_tfsampling -from magenta.models.coconet import lib_util +import lib_graph +import lib_logging +import lib_mask +import lib_pianoroll +import lib_sampling +import lib_tfsampling +import lib_util import numpy as np import pretty_midi import tensorflow as tf diff --git a/magenta/models/coconet/coconet_train.py b/magenta/models/coconet/coconet_train.py index d83bb266de..93dc60a986 100644 --- a/magenta/models/coconet/coconet_train.py +++ b/magenta/models/coconet/coconet_train.py @@ -109,7 +109,7 @@ 'Optimize masked predictions only.') flags.DEFINE_bool('rescale_loss', True, 'Rescale loss based on context size.') flags.DEFINE_integer( - 'patience', 10, + 'patience', 5, 'Number of epochs to wait for improvement before decaying learning rate.') flags.DEFINE_float('corrupt_ratio', 0.5, 'Fraction of variables to mask out.') diff --git a/magenta/models/coconet/evalmodel_bazel.sh b/magenta/models/coconet/evalmodel_bazel.sh index 549c24417d..9f2a37d924 100644 --- a/magenta/models/coconet/evalmodel_bazel.sh +++ b/magenta/models/coconet/evalmodel_bazel.sh @@ -28,22 +28,21 @@ checkpoint=$1 data_dir="testdata" # Change this to where evaluation results are stored. -eval_logdir="eval_logdir" +eval_logdir=$1 # Evaluation settings. fold=valid -fold_index=1 # Optionally can specify index of specific piece to be evaluated. -unit=frame -chronological=false -ensemble_size=5 # Number of different orderings to average. +#fold_index=1 # Optionally can specify index of specific piece to be evaluated. +unit=note +chronological=True +ensemble_size=1 # Number of different orderings to average. # Run command. -python coconet_evaluate.py \ +python3 coconet_evaluate.py \ --data_dir=$data_dir \ --eval_logdir=$eval_logdir \ --checkpoint=$checkpoint \ --fold=$fold \ ---unit=$unit \ --chronological=$chronological \ ---ensemble_size=5 \ -#--fold_index=$fold_index +--ensemble_size=$ensemble_size \ +--unit=$unit diff --git a/magenta/models/coconet/lib_evaluation.py b/magenta/models/coconet/lib_evaluation.py index 8761159540..4295a837c7 100644 --- a/magenta/models/coconet/lib_evaluation.py +++ b/magenta/models/coconet/lib_evaluation.py @@ -19,10 +19,10 @@ import time -from magenta.models.coconet import lib_tfutil -from magenta.models.coconet import lib_util +import lib_tfutil +import lib_util import numpy as np -from scipy.misc import logsumexp +from scipy.special import logsumexp import tensorflow as tf @@ -287,7 +287,7 @@ def __call__(self, pianoroll): self._update_lls(lls, xs, pxhats, ts, ds) return lls - def _draw_ordering(self, tt, dd): + def draw_ordering(self, tt, dd): o = np.arange(tt * dd, dtype=np.int32) if not self.chronological: np.random.shuffle(o) diff --git a/magenta/models/coconet/lib_logging.py b/magenta/models/coconet/lib_logging.py index 7a4c34f4bf..b29a64988b 100644 --- a/magenta/models/coconet/lib_logging.py +++ b/magenta/models/coconet/lib_logging.py @@ -20,7 +20,7 @@ import contextlib import os -from magenta.models.coconet import lib_util +import lib_util import numpy as np diff --git a/magenta/models/coconet/lib_sampling.py b/magenta/models/coconet/lib_sampling.py index 37b74d992b..ebb962b320 100644 --- a/magenta/models/coconet/lib_sampling.py +++ b/magenta/models/coconet/lib_sampling.py @@ -18,11 +18,11 @@ from __future__ import division from __future__ import print_function -from magenta.models.coconet import lib_data -from magenta.models.coconet import lib_logging -from magenta.models.coconet import lib_mask -from magenta.models.coconet import lib_tfutil -from magenta.models.coconet import lib_util +import lib_data +import lib_logging +import lib_mask +import lib_tfutil +import lib_util import numpy as np ################ diff --git a/magenta/models/coconet/sample_bazel.sh b/magenta/models/coconet/sample_bazel.sh index 477dd8d2d7..5a5766e443 100644 --- a/magenta/models/coconet/sample_bazel.sh +++ b/magenta/models/coconet/sample_bazel.sh @@ -35,7 +35,7 @@ strategy=igibbs tfsample=true # Run command. -python coconet_sample.py \ +python3 coconet_sample.py \ --checkpoint="$checkpoint" \ --gen_batch_size=$gen_batch_size \ --piece_length=$piece_length \ @@ -44,5 +44,3 @@ python coconet_sample.py \ --tfsample=$tfsample \ --generation_output_dir=$generation_output_dir \ --logtostderr - - diff --git a/magenta/models/coconet/testdata/Jsb16thSeparated.npz b/magenta/models/coconet/testdata/Jsb16thSeparated.npz new file mode 100755 index 0000000000..178e1d8a32 Binary files /dev/null and b/magenta/models/coconet/testdata/Jsb16thSeparated.npz differ diff --git a/magenta/models/coconet/train_bazel.sh b/magenta/models/coconet/train_bazel.sh index ad4fe83839..1211a92410 100644 --- a/magenta/models/coconet/train_bazel.sh +++ b/magenta/models/coconet/train_bazel.sh @@ -33,7 +33,7 @@ quantization_level=0.125 # 16th notes maskout_method=orderless num_layers=32 num_filters=64 -batch_size=20 +batch_size=10 use_sep_conv=True architecture='dilated' num_dilation_blocks=1 diff --git a/magenta/models/coconet/transfer.txt b/magenta/models/coconet/transfer.txt index 411b94de80..2a3fa30c46 100644 --- a/magenta/models/coconet/transfer.txt +++ b/magenta/models/coconet/transfer.txt @@ -1,3 +1,5 @@ +coconet_evaluate.py +evalmodel_bazel.sh coconet_train.py train_bazel.sh lib_util.py @@ -7,3 +9,4 @@ lib_data.py lib_mask.py lib_pianoroll.py lib_tfutil.py +lib_evaluation.py