{"id":24746563,"url":"https://github.com/samuelmarks/ml-glaucoma","last_synced_at":"2026-03-05T17:40:44.170Z","repository":{"id":86673121,"uuid":"79754884","full_name":"SamuelMarks/ml-glaucoma","owner":"SamuelMarks","description":"ML programs for glaucoma diagnoses.","archived":false,"fork":false,"pushed_at":"2020-12-19T08:50:14.000Z","size":1047,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-04T00:23:15.176Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://sydneyscientific.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SamuelMarks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-23T00:01:04.000Z","updated_at":"2024-04-05T12:32:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"ec7f5bf0-e6d7-4f6e-9fa4-5680197001f8","html_url":"https://github.com/SamuelMarks/ml-glaucoma","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SamuelMarks/ml-glaucoma","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fml-glaucoma","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fml-glaucoma/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fml-glaucoma/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fml-glaucoma/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SamuelMarks","download_url":"https://codeload.github.com/SamuelMarks/ml-glaucoma/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fml-glaucoma/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266507366,"owners_count":23940055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-28T04:29:20.332Z","updated_at":"2026-03-05T17:40:39.137Z","avatar_url":"https://github.com/SamuelMarks.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"ml_glaucoma\n===========\n[![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech)\n![Python implementation](https://img.shields.io/badge/implementation-cpython-blue.svg)\n[![License](https://img.shields.io/badge/license-Apache--2.0%20OR%20MIT-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336)](https://pycqa.github.io/isort/)\n\nOriginally this repo started off as a custom CNN for glaucoma diagnoses, but has since expanded into something more.\n\nThis repo is no longer maintained, but has been split into (at least):\n\n - [ml-prepare](https://github.com/SamuelMarks/ml-prepare)\n - [ml-params](https://github.com/SamuelMarks/ml-params)\n - [ml-params-keras](https://github.com/SamuelMarks/ml-params-keras)\n - [ml-params-tensorflow](https://github.com/SamuelMarks/ml-params-tensorflow)\n\n## Install dependencies\n\n    pip install -r requirements.txt\n\n## Install package\n\n    pip install .\n\n## CLI usage\n\n    $ python -m ml_glaucoma --help\n\n    usage: python -m ml_glaucoma [-h] [--version]\n                             {download,vis,train,evaluate,parser,info} ...\n\n    CLI for a Glaucoma diagnosing CNN\n    \n    positional arguments:\n      {download,vis,train,evaluate,parser,info}\n        download            Download and prepare required data\n        vis                 Visualise data\n        train               Train model\n        evaluate            Evaluate model\n        parser              Parse out metrics from log output. Default: per epoch\n                            sensitivity \u0026 specificity.\n        info                Info subcommand\n    \n    optional arguments:\n      -h, --help            show this help message and exit\n      --version             show program's version number and exit\n\n\n### `download`\n\n    $ python -m ml_glaucoma download --help\n\n    usage: python -m ml_glaucoma download [-h]\n                                      [-ds {bmes,refuge} [{bmes,refuge} ...]]\n                                      [--data_dir DATA_DIR]\n                                      [--download_dir DOWNLOAD_DIR]\n                                      [--extract_dir EXTRACT_DIR]\n                                      [--manual_dir MANUAL_DIR]\n                                      [--download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}]\n                                      [-r RESOLUTION RESOLUTION]\n                                      [--gray_on_disk] [--bmes_init]\n                                      [--bmes_parent_dir BMES_PARENT_DIR]\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -ds {bmes,refuge} [{bmes,refuge} ...], --dataset {bmes,refuge} [{bmes,refuge} ...]\n                            dataset key\n      --data_dir DATA_DIR   root directory to store processed tfds records\n      --download_dir DOWNLOAD_DIR\n                            directory to store downloaded files\n      --extract_dir EXTRACT_DIR\n                            directory where extracted files are stored\n      --manual_dir MANUAL_DIR\n                            directory where manually downloaded files are saved\n      --download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}\n                            tfds.GenerateMode\n      -r RESOLUTION RESOLUTION, --resolution RESOLUTION RESOLUTION\n                            image resolution\n      --gray_on_disk        whether or not to save data as grayscale on disk\n      --bmes_init           initial bmes get_data\n      --bmes_parent_dir BMES_PARENT_DIR\n                            parent directory of bmes data\n\n\n### `vis`\n\n    $ python -m ml_glaucoma vis --help\n\n    usage: python -m ml_glaucoma vis [-h] [-ds {bmes,refuge} [{bmes,refuge} ...]]\n                                     [--data_dir DATA_DIR]\n                                     [--download_dir DOWNLOAD_DIR]\n                                     [--extract_dir EXTRACT_DIR]\n                                     [--manual_dir MANUAL_DIR]\n                                     [--download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}]\n                                     [-r RESOLUTION RESOLUTION] [--gray_on_disk]\n                                     [--bmes_init]\n                                     [--bmes_parent_dir BMES_PARENT_DIR] [-fv]\n                                     [-fh] [--gray]\n                                     [-l {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}]\n                                     [-m [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]]]\n                                     [-pt [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]]]\n                                     [-rt [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]]]\n                                     [--shuffle_buffer SHUFFLE_BUFFER]\n                                     [--use_inverse_freq_weights]\n    \n    optional arguments:\n      -h, --help            show this help message and exit\n      -ds {bmes,refuge} [{bmes,refuge} ...], --dataset {bmes,refuge} [{bmes,refuge} ...]\n                            dataset key\n      --data_dir DATA_DIR   root directory to store processed tfds records\n      --download_dir DOWNLOAD_DIR\n                            directory to store downloaded files\n      --extract_dir EXTRACT_DIR\n                            directory where extracted files are stored\n      --manual_dir MANUAL_DIR\n                            directory where manually downloaded files are saved\n      --download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}\n                            tfds.GenerateMode\n      -r RESOLUTION RESOLUTION, --resolution RESOLUTION RESOLUTION\n                            image resolution\n      --gray_on_disk        whether or not to save data as grayscale on disk\n      --bmes_init           initial bmes get_data\n      --bmes_parent_dir BMES_PARENT_DIR\n                            parent directory of bmes data\n      -fv, --maybe_vertical_flip\n                            randomly flip training input vertically\n      -fh, --maybe_horizontal_flip\n                            randomly flip training input horizontally\n      --gray                use grayscale\n      -l {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}, --loss {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}\n                            loss function to use\n      -m [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]], --metrics [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]]\n                            metric functions to use\n      -pt [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]], --precision_thresholds [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]]\n                            precision thresholds\n      -rt [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]], --recall_thresholds [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]]\n                            recall thresholds\n      --shuffle_buffer SHUFFLE_BUFFER\n                            buffer used in tf.data.Dataset.shuffle\n      --use_inverse_freq_weights\n                            weight loss according to inverse class frequency\n\n### `train`\n\n    $ python -m ml_glaucoma train --help\n\n    usage: python -m ml_glaucoma train [-h]\n                                       [-ds {bmes,refuge} [{bmes,refuge} ...]]\n                                       [--data_dir DATA_DIR]\n                                       [--download_dir DOWNLOAD_DIR]\n                                       [--extract_dir EXTRACT_DIR]\n                                       [--manual_dir MANUAL_DIR]\n                                       [--download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}]\n                                       [-r RESOLUTION RESOLUTION] [--gray_on_disk]\n                                       [--bmes_init]\n                                       [--bmes_parent_dir BMES_PARENT_DIR] [-fv]\n                                       [-fh] [--gray]\n                                       [-l {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}]\n                                       [-m [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]]]\n                                       [-pt [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]]]\n                                       [-rt [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]]]\n                                       [--shuffle_buffer SHUFFLE_BUFFER]\n                                       [--use_inverse_freq_weights]\n                                       [--model_file [MODEL_FILE [MODEL_FILE ...]]]\n                                       [--model_param [MODEL_PARAM [MODEL_PARAM ...]]]\n                                       [-o {Adadelta,Adagrad,Adam,Adamax,Ftrl,Nadam,Optimizer,RMSprop,SGD}]\n                                       [-lr LEARNING_RATE]\n                                       [--optimizer_params OPTIMIZER_PARAMS]\n                                       [--exp_lr_decay EXP_LR_DECAY]\n                                       [-b BATCH_SIZE] [-e EPOCHS]\n                                       [--class-weight CLASS_WEIGHT]\n                                       [--callback [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} ...]]]\n                                       [--model_dir MODEL_DIR]\n                                       [-c CHECKPOINT_FREQ]\n                                       [--summary_freq SUMMARY_FREQ]\n                                       [-tb TB_LOG_DIR] [--write_images]\n                                       [--seed SEED] [--disable-gpu]\n                                       [--continuous] [--delete-lt DELETE_LT]\n                                       [--model-dir-autoincrement MODEL_DIR_AUTOINCREMENT]\n    \n    optional arguments:\n      -h, --help            show this help message and exit\n      -ds {bmes,refuge} [{bmes,refuge} ...], --dataset {bmes,refuge} [{bmes,refuge} ...]\n                            dataset key\n      --data_dir DATA_DIR   root directory to store processed tfds records\n      --download_dir DOWNLOAD_DIR\n                            directory to store downloaded files\n      --extract_dir EXTRACT_DIR\n                            directory where extracted files are stored\n      --manual_dir MANUAL_DIR\n                            directory where manually downloaded files are saved\n      --download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}\n                            tfds.GenerateMode\n      -r RESOLUTION RESOLUTION, --resolution RESOLUTION RESOLUTION\n                            image resolution\n      --gray_on_disk        whether or not to save data as grayscale on disk\n      --bmes_init           initial bmes get_data\n      --bmes_parent_dir BMES_PARENT_DIR\n                            parent directory of bmes data\n      -fv, --maybe_vertical_flip\n                            randomly flip training input vertically\n      -fh, --maybe_horizontal_flip\n                            randomly flip training input horizontally\n      --gray                use grayscale\n      -l {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}, --loss {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}\n                            loss function to use\n      -m [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]], --metrics [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]]\n                            metric functions to use\n      -pt [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]], --precision_thresholds [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]]\n                            precision thresholds\n      -rt [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]], --recall_thresholds [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]]\n                            recall thresholds\n      --shuffle_buffer SHUFFLE_BUFFER\n                            buffer used in tf.data.Dataset.shuffle\n      --use_inverse_freq_weights\n                            weight loss according to inverse class frequency\n      --model_file [MODEL_FILE [MODEL_FILE ...]]\n                            gin files for model definition. Should define\n                            `model_fn` macro either here or in --gin_param\n      --model_param [MODEL_PARAM [MODEL_PARAM ...]]\n                            gin_params for model definition. Should define\n                            `model_fn` macro either here or in --gin_file\n      -o {Adadelta,Adagrad,Adam,Adamax,Ftrl,Nadam,Optimizer,RMSprop,SGD}, --optimizer {Adadelta,Adagrad,Adam,Adamax,Ftrl,Nadam,Optimizer,RMSprop,SGD}\n                            class name of optimizer to use\n      -lr LEARNING_RATE, --learning_rate LEARNING_RATE\n                            base optimizer learning rate\n      --optimizer_params OPTIMIZER_PARAMS\n                            Extra optimiser args, e.g.: '{epsilon: 1e-7, amsgrad:\n                            true}'\n      --exp_lr_decay EXP_LR_DECAY\n                            exponential learning rate decay factor applied per\n                            epoch, e.g. 0.98. None is interpreted as no decay\n      -b BATCH_SIZE, --batch_size BATCH_SIZE\n                            size of each batch\n      -e EPOCHS, --epochs EPOCHS\n                            number of epochs to run training from\n      --class-weight CLASS_WEIGHT\n                            Optional dictionary mapping class indices (integers)to\n                            a weight (float) value, used for weighting the loss\n                            function(during training only).This can be useful to\n                            tell the model to\"pay more attention\" to samples\n                            froman under-represented class.\n      --callback [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} ...]]\n                            Keras callback function(s) to use. Extends default\n                            callback list.\n      --model_dir MODEL_DIR\n                            model directory in which to save weights and\n                            tensorboard summaries\n      -c CHECKPOINT_FREQ, --checkpoint_freq CHECKPOINT_FREQ\n                            epoch frequency at which to save model weights\n      --summary_freq SUMMARY_FREQ\n                            batch frequency at which to save tensorboard summaries\n      -tb TB_LOG_DIR, --tb_log_dir TB_LOG_DIR\n                            tensorboard_log_dir (defaults to model_dir)\n      --write_images        whether or not to write images to tensorboard\n      --seed SEED           Set the seed, combine with `--disable-gpu` to disable\n                            GPU for added determinism\n      --disable-gpu         Set the seed, combine with `--disable-gpu` to disable\n                            GPU for added determinism\n      --continuous          after each successful train, run again\n      --delete-lt DELETE_LT\n                            delete *.h5 files that are less than this threshold\n      --model-dir-autoincrement MODEL_DIR_AUTOINCREMENT\n                            autoincrement rather than overwrite the model dir\n                            (when --continuous is set)\n\n### `evaluate`\n\n    $ python -m ml_glaucoma evaluate --help\n\n    usage: python -m ml_glaucoma evaluate [-h]\n                                          [-ds {bmes,refuge} [{bmes,refuge} ...]]\n                                          [--data_dir DATA_DIR]\n                                          [--download_dir DOWNLOAD_DIR]\n                                          [--extract_dir EXTRACT_DIR]\n                                          [--manual_dir MANUAL_DIR]\n                                          [--download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}]\n                                          [-r RESOLUTION RESOLUTION]\n                                          [--gray_on_disk] [--bmes_init]\n                                          [--bmes_parent_dir BMES_PARENT_DIR]\n                                          [-fv] [-fh] [--gray]\n                                          [-l {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}]\n                                          [-m [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]]]\n                                          [-pt [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]]]\n                                          [-rt [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]]]\n                                          [--shuffle_buffer SHUFFLE_BUFFER]\n                                          [--use_inverse_freq_weights]\n                                          [--model_file [MODEL_FILE [MODEL_FILE ...]]]\n                                          [--model_param [MODEL_PARAM [MODEL_PARAM ...]]]\n                                          [-o {Adadelta,Adagrad,Adam,Adamax,Ftrl,Nadam,Optimizer,RMSprop,SGD}]\n                                          [-lr LEARNING_RATE]\n                                          [--optimizer_params OPTIMIZER_PARAMS]\n                                          [--exp_lr_decay EXP_LR_DECAY]\n                                          [-b BATCH_SIZE] [-e EPOCHS]\n                                          [--class-weight CLASS_WEIGHT]\n                                          [--callback [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} ...]]]\n                                          [--model_dir MODEL_DIR]\n                                          [-c CHECKPOINT_FREQ]\n                                          [--summary_freq SUMMARY_FREQ]\n                                          [-tb TB_LOG_DIR] [--write_images]\n                                          [--seed SEED] [--disable-gpu]\n                                          [--continuous] [--delete-lt DELETE_LT]\n                                          [--model-dir-autoincrement MODEL_DIR_AUTOINCREMENT]\n    \n    optional arguments:\n      -h, --help            show this help message and exit\n      -ds {bmes,refuge} [{bmes,refuge} ...], --dataset {bmes,refuge} [{bmes,refuge} ...]\n                            dataset key\n      --data_dir DATA_DIR   root directory to store processed tfds records\n      --download_dir DOWNLOAD_DIR\n                            directory to store downloaded files\n      --extract_dir EXTRACT_DIR\n                            directory where extracted files are stored\n      --manual_dir MANUAL_DIR\n                            directory where manually downloaded files are saved\n      --download_mode {reuse_dataset_if_exists,reuse_cache_if_exists,force_redownload}\n                            tfds.GenerateMode\n      -r RESOLUTION RESOLUTION, --resolution RESOLUTION RESOLUTION\n                            image resolution\n      --gray_on_disk        whether or not to save data as grayscale on disk\n      --bmes_init           initial bmes get_data\n      --bmes_parent_dir BMES_PARENT_DIR\n                            parent directory of bmes data\n      -fv, --maybe_vertical_flip\n                            randomly flip training input vertically\n      -fh, --maybe_horizontal_flip\n                            randomly flip training input horizontally\n      --gray                use grayscale\n      -l {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}, --loss {AdaBound,BinaryCrossentropy,BinaryCrossentropyWithRanking,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,DiceLoss,Hinge,Huber,JaccardDistance,KLD,KLDivergence,Kappa,LogCosh,MAE,MAPE,MSE,MSLE,MeanAbsoluteError,MeanAbsolutePercentageError,MeanSquaredError,MeanSquaredLogarithmicError,PairLoss,Poisson,Reduction,SmoothL1,SoftAUC,SparseCategoricalCrossentropy,SquaredHinge,Yogi,binary_crossentropy,categorical_crossentropy,categorical_hinge,cosine_similarity,hinge,kld,kullback_leibler_divergence,logcosh,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,serialize,sparse_categorical_crossentropy,squared_hinge}\n                            loss function to use\n      -m [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]], --metrics [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} [{AUC,Accuracy,BinaryAccuracy,BinaryCrossentropy,CategoricalAccuracy,CategoricalCrossentropy,CategoricalHinge,CosineSimilarity,FalseNegatives,FalsePositives,Hinge,KLD,KLDivergence,LogCoshError,MAE,MAPE,MSE,MSLE,Mean,MeanAbsoluteError,MeanAbsolutePercentageError,MeanIoU,MeanRelativeError,MeanSquaredError,MeanSquaredLogarithmicError,MeanTensor,Metric,Poisson,Precision,Recall,RootMeanSquaredError,SensitivityAtSpecificity,SparseCategoricalAccuracy,SparseCategoricalCrossentropy,SparseTopKCategoricalAccuracy,SpecificityAtSensitivity,SquaredHinge,Sum,TopKCategoricalAccuracy,TrueNegatives,TruePositives,binary_accuracy,binary_crossentropy,categorical_accuracy,categorical_crossentropy,hinge,kld,kullback_leibler_divergence,mae,mape,mean_absolute_error,mean_absolute_percentage_error,mean_squared_error,mean_squared_logarithmic_error,mse,msle,poisson,sparse_categorical_accuracy,sparse_categorical_crossentropy,sparse_top_k_categorical_accuracy,squared_hinge,top_k_categorical_accuracy} ...]]\n                            metric functions to use\n      -pt [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]], --precision_thresholds [PRECISION_THRESHOLDS [PRECISION_THRESHOLDS ...]]\n                            precision thresholds\n      -rt [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]], --recall_thresholds [RECALL_THRESHOLDS [RECALL_THRESHOLDS ...]]\n                            recall thresholds\n      --shuffle_buffer SHUFFLE_BUFFER\n                            buffer used in tf.data.Dataset.shuffle\n      --use_inverse_freq_weights\n                            weight loss according to inverse class frequency\n      --model_file [MODEL_FILE [MODEL_FILE ...]]\n                            gin files for model definition. Should define\n                            `model_fn` macro either here or in --gin_param\n      --model_param [MODEL_PARAM [MODEL_PARAM ...]]\n                            gin_params for model definition. Should define\n                            `model_fn` macro either here or in --gin_file\n      -o {Adadelta,Adagrad,Adam,Adamax,Ftrl,Nadam,Optimizer,RMSprop,SGD}, --optimizer {Adadelta,Adagrad,Adam,Adamax,Ftrl,Nadam,Optimizer,RMSprop,SGD}\n                            class name of optimizer to use\n      -lr LEARNING_RATE, --learning_rate LEARNING_RATE\n                            base optimizer learning rate\n      --optimizer_params OPTIMIZER_PARAMS\n                            Extra optimiser args, e.g.: '{epsilon: 1e-7, amsgrad:\n                            true}'\n      --exp_lr_decay EXP_LR_DECAY\n                            exponential learning rate decay factor applied per\n                            epoch, e.g. 0.98. None is interpreted as no decay\n      -b BATCH_SIZE, --batch_size BATCH_SIZE\n                            size of each batch\n      -e EPOCHS, --epochs EPOCHS\n                            number of epochs to run training from\n      --class-weight CLASS_WEIGHT\n                            Optional dictionary mapping class indices (integers)to\n                            a weight (float) value, used for weighting the loss\n                            function(during training only).This can be useful to\n                            tell the model to\"pay more attention\" to samples\n                            froman under-represented class.\n      --callback [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} [{AucRocCallback,BaseLogger,CSVLogger,Callback,EarlyStopping,ExponentialDecayLrSchedule,History,LambdaCallback,LearningRateScheduler,LoadingModelCheckpoint,ModelCheckpoint,ProgbarLogger,ReduceLROnPlateau,RemoteMonitor,SGDRScheduler,TensorBoard,TerminateOnNaN} ...]]\n                            Keras callback function(s) to use. Extends default\n                            callback list.\n      --model_dir MODEL_DIR\n                            model directory in which to save weights and\n                            tensorboard summaries\n      -c CHECKPOINT_FREQ, --checkpoint_freq CHECKPOINT_FREQ\n                            epoch frequency at which to save model weights\n      --summary_freq SUMMARY_FREQ\n                            batch frequency at which to save tensorboard summaries\n      -tb TB_LOG_DIR, --tb_log_dir TB_LOG_DIR\n                            tensorboard_log_dir (defaults to model_dir)\n      --write_images        whether or not to write images to tensorboard\n      --seed SEED           Set the seed, combine with `--disable-gpu` to disable\n                            GPU for added determinism\n      --disable-gpu         Set the seed, combine with `--disable-gpu` to disable\n                            GPU for added determinism\n      --continuous          after each successful train, run again\n      --delete-lt DELETE_LT\n                            delete *.h5 files that are less than this threshold\n      --model-dir-autoincrement MODEL_DIR_AUTOINCREMENT\n                            autoincrement rather than overwrite the model dir\n                            (when --continuous is set)\n\n### `parser`\nYou can pipe or include a filename.\n\n    $ python -m ml_glaucoma parser --help\n\n    usage: python -m ml_glaucoma parser [-h] [-d DIRECTORY]\n                                        [--threshold THRESHOLD] [--top TOP]\n                                        [--by-diff] [--tag TAG]\n                                        [infile]\n    \n    Show metrics from output. Default: per epoch sensitivity \u0026 specificity.\n    \n    positional arguments:\n      infile                File to work from. Defaults to stdin. So can pipe.\n    \n    optional arguments:\n      -h, --help            show this help message and exit\n      -d DIRECTORY, --directory DIRECTORY\n                            Directory. Searches here rather than infile.\n      --threshold THRESHOLD\n                            E.g.: 0.7 for sensitivity \u0026 specificity \u003e= 70%\n      --top TOP             Show top k results\n      --by-diff             Sort by lowest difference between sensitivity \u0026\n                            specificity\n      --tag TAG             Tag to filter by\n\n# Project Structure\n\nTraining/validation scripts are provided in `data_preparation_scripts` and each call a function defined in `ml_glaucoma.runners`. We aim to provide highly-configurable runs, but the main parts to consider are:\n\n* `problem`: the dataset, loss and metrics used during training\n* `model_fn`: the function that takes one or more `tf.keras.layers.Input`s and returns a learnable keras model.\n\n`model_fn`s are configured using using a forked [TF2.0 compatible gin-config](https://github.com/jackd/gin-config/tree/tf2) (awaiting on [this PR](https://github.com/google/gin-config/pull/17) before reverting to the [google version](https://github.com/google/gin-config.git). See example configs in `model_configs` and the [gin user guide](https://github.com/google/gin-config/blob/master/docs/index.md).\n\n## Example usage:\n\n```bash\npython -m ml_glaucoma vis --dataset=refuge\npython -m ml_glaucoma train \\\n  --model_file 'model_configs/dc.gin'  \\\n  --model_param 'import ml_glaucoma.gin_keras' 'dc0.kernel_regularizer=@tf.keras.regularizers.l2()' 'tf.keras.regularizers.l2.l = 1e-2' \\\n  --model_dir /tmp/ml_glaucoma/dc0-reg \\\n  -m BinaryAccuracy AUC \\\n  -pt 0.1 0.2 0.5 -rt 0.1 0.2 0.5 \\\n  --use_inverse_freq_weights\n# ...\ntensorboard --logdir=/tmp/ml_glaucoma\n```\n\n## Tensorflow Datasets\n\nThe main `Problem` implementation is backed by [tensorflow_datasets](https://github.com/tensorflow/datasets). This should manage dataset downloads, extraction, sha256 checks, on-disk shuffling/sharding and other best practices. Consequently it takes slightly longer to process initially, but the benefits in the long run are worth it.\n\n## BMES Initialization\n\nThe current implementation leverages the existing `ml_glaucoma.utils.bmes_data_prep.get_data` method to separate files. This uses `tf.contrib` so requires `tf \u003c 2.0`. It can be run using the `--bmes_init` flag within `python -m ml_glaucoma download`. This must be run prior to the standard `tfds.DatasetBuilder.download_and_prepare` which is run automatically if necessary. Once the `tfds` files have been generated, the original `get_data` directories are no longer required.\n\nIf the test/train/validation split here is just a random split, this could be done more easily by creating a single `tfds` split and using `tfds.Split.subsplit` - see [this post](https://www.tensorflow.org/datasets/splits).\n\n## Status\n\n* Automatic model saving/loading via modified `ModelCheckpoint`.\n* Automatic tensorboard updates (fairly hacky interoperability with `ModelCheckpoint` to ensure restarted training runs have the appropriate step count).\n* Loss re-weighting according to inverse class frequency (`TfdsProblem.use_inverse_freq_weights`).\n* Only `dc0`, `applications` ([Keras applications](https://keras.io/applications)), `efficientnet` and `squeeze_excite_resnet` model verified to work. `dr0`, `dc1`, `dc2`, `dc3` and other squeeze excite networks implemented but untested.\n* Only `refuge` and `bmes` dataset implemented, and only tested the classification task.\n* BMES dataset: currently requires 2-stage preparation: `bmes_init` which is based on `ml_glaucoma.utils.bmes_data_prep.get_data` and the standard `tfds.DatasetBuilder.download_and_prepare`. The first stage will only be run if `--bmes_init` is used in `python -m ml_glaucoma download` arguments.\n\n\n---\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttps://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003chttps://opensource.org/licenses/MIT\u003e)\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelmarks%2Fml-glaucoma","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamuelmarks%2Fml-glaucoma","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelmarks%2Fml-glaucoma/lists"}