{"id":19899176,"url":"https://github.com/tootouch/balancedsoftmax","last_synced_at":"2026-06-06T13:31:25.939Z","repository":{"id":188051071,"uuid":"678019462","full_name":"TooTouch/BalancedSoftmax","owner":"TooTouch","description":"Balanced Softmax for classification","archived":false,"fork":false,"pushed_at":"2023-08-18T15:11:55.000Z","size":4213,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T06:43:30.482Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TooTouch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-08-13T12:25:33.000Z","updated_at":"2024-08-05T16:24:50.000Z","dependencies_parsed_at":"2025-01-11T20:44:36.953Z","dependency_job_id":"59699a96-5045-4817-9bbf-a3f30e777e8f","html_url":"https://github.com/TooTouch/BalancedSoftmax","commit_stats":null,"previous_names":["tootouch/balancedsoftmax"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TooTouch/BalancedSoftmax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TooTouch%2FBalancedSoftmax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TooTouch%2FBalancedSoftmax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TooTouch%2FBalancedSoftmax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TooTouch%2FBalancedSoftmax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TooTouch","download_url":"https://codeload.github.com/TooTouch/BalancedSoftmax/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TooTouch%2FBalancedSoftmax/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33984824,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":"2024-11-12T20:07:26.999Z","updated_at":"2026-06-06T13:31:25.921Z","avatar_url":"https://github.com/TooTouch.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BalancedSoftmax\nBalanced Softmax for classification.\n\nThis repository only considers Balanced Softmax.\n\n- **paper**: [Balanced Meta-Softmax for Long-Tailed Visual Recognition](https://proceedings.neurips.cc/paper/2020/file/2ba61cc3a8f44143e1f2f13b2b729ab3-Paper.pdf) (NeurIPS 2020)\n- **official github**: https://github.com/jiawei-ren/BalancedMetaSoftmax-Classification/tree/main\n\n# Environment\n\nI use a docker image. `nvcr.io/nvidia/pytorch:22.12-py3`\n\n```bash\npip install -r requirements.txt\n```\n\n# Datasets\n\n[datasets/build.py](https://github.com/TooTouch/BalancedSoftmax/blob/main/datasets/build.py)\n\n- CIFAR10-LT\n- CIFAR100-LT\n\n```python\nfrom datasets import CIFAR10LT\n\ntrainset = CIFAR10LT(\n    root             = '/datasets/CIFAR10',\n    train            = True,\n    download         = True,\n    imb_type         = 'exp',\n    imbalance_factor = 200,\n)\n\nprint(trainset.num_per_cls)\n\u003e\u003e {0: 5000,\n    1: 2775,\n    2: 1540,\n    3: 854,\n    4: 474,\n    5: 263,\n    6: 146,\n    7: 81,\n    8: 45,\n    9: 25}\n```\n\n# Balanced Softmax\n\n[losses.py](https://github.com/TooTouch/BalancedSoftmax/blob/main/losses.py)\n\n```python\nfrom losses import BalancedSoftmax\n\nnum_per_cls = list(trainset.num_per_cls.values())\ncriterion = BalancedSoftmax(num_per_cls=num_per_cls)\n```\n\n# Experiments\n\n## 1. Experiment setting\n\n[configs.yaml](https://github.com/TooTouch/BalancedSoftmax/blob/main/configs.yaml)\n\n```yaml\nDEFAULT:\n  seed: 0\n  savedir: ./results\n  exp_name: CE-IF_1\nDATASET:\n  datadir: /datasets\n  batch_size: 32\n  test_batch_size: 2048\n  num_workers: 12\n  imbalance_type: null\n  imbalance_factor: 1\n  aug_info:\n    - RandomCrop\n    - RandomHorizontalFlip\nLOSS:\n  name: CrossEntropyLoss\nOPTIMIZER:\n  name: SGD\n  lr: 0.1\nSCHEDULER:\n  sched_name: cosine_annealing\n  params:\n    t_mult: 1\n    eta_min: 0.00001\nTRAIN:\n  epochs: 50\n  grad_accum_steps: 1\n  mixed_precision: fp16\n  log_interval: 10\n  ckp_metric: bcr\n  wandb:\n    use: true\n    entity: tootouch\n    project_name: Balanced Softmax\nMODEL:\n  name: resnet18\n  pretrained: false\n```\n\n## 2. Run\n\n[run.sh](https://github.com/TooTouch/BalancedSoftmax/blob/main/run.sh)\n\n```bash\ndataname='CIFAR10LT CIFAR100LT'\nIF='1 10 50 100 200'\nlosses='CrossEntropyLoss BalancedSoftmax'\n\nfor d in $dataname\ndo\n    for f in $IF\n    do\n        for l in $losses\n        do\n            if [ $f == '1' ] \u0026\u0026 [ $l == 'BalancedSoftmax' ]; then\n                continue\n            else\n                echo \"dataset: $d, loss: $l, IF: $f\"\n                python main.py --config configs.yaml \\\n                            DEFAULT.exp_name $l-IF_$f \\\n                            DATASET.name $d \\\n                            DATASET.imbalance_type exp \\\n                            DATASET.imbalance_factor $f \\\n                            LOSS.name $l\n            fi\n        done\n    done\ndone\n\n```\n\n## 3. Results\n\n\n### 3.1 Imbalance type - exp\n**Experiments log** [ [wandb](https://wandb.ai/tootouch/Balanced%20Softmax?workspace=user-tootouch) ] \n\n\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://github.com/TooTouch/BalancedSoftmax/blob/main/assets/figure1.jpg?raw=true\"\u003e\u003cbr\u003eFigure 1. Imbalance factor에 따른 실험 결과\n\u003c/p\u003e\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003ccaption\u003e\n    Table 1. Imbalance factor에 따른 실험 결과\n  \u003c/caption\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eDataset\u003c/th\u003e\n      \u003cth colspan=\"5\" halign=\"left\"\u003eCIFAR10LT\u003c/th\u003e\n      \u003cth colspan=\"5\" halign=\"left\"\u003eCIFAR100LT\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eImbalance factor\u003c/th\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003cth\u003e10\u003c/th\u003e\n      \u003cth\u003e50\u003c/th\u003e\n      \u003cth\u003e100\u003c/th\u003e\n      \u003cth\u003e200\u003c/th\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003cth\u003e10\u003c/th\u003e\n      \u003cth\u003e50\u003c/th\u003e\n      \u003cth\u003e100\u003c/th\u003e\n      \u003cth\u003e200\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eCrossEntropyLoss\u003c/th\u003e\n      \u003ctd\u003e0.9283\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.8717\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e0.7779\u003c/td\u003e\n      \u003ctd\u003e0.7065\u003c/td\u003e\n      \u003ctd\u003e0.6426\u003c/td\u003e\n      \u003ctd\u003e0.7313\u003c/td\u003e\n      \u003ctd\u003e0.5865\u003c/td\u003e\n      \u003ctd\u003e0.4544\u003c/td\u003e\n      \u003ctd\u003e0.4060\u003c/td\u003e\n      \u003ctd\u003e0.3492\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eBalancedSoftmax\u003c/th\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e0.8694\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.7992\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.7601\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.7034\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.5999\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.4845\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.4447\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.3823\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://github.com/TooTouch/BalancedSoftmax/blob/main/assets/figure2.jpg?raw=true\"\u003e\u003cbr\u003eFigure 2. Imbalance factor에 따른 실험 결과 class별 성능\n\u003c/p\u003e\n\n\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://github.com/TooTouch/BalancedSoftmax/blob/main/assets/figure3.jpg?raw=true\"\u003e\u003cbr\u003eFigure 3. CIFAR10LT에 대한 cross entropy와 balanced softmax 간 confusion matrix 비교. Imbalance factor(IF)는 200.\n\u003c/p\u003e\n\n\n\n### 3.2 Imbalance type - step\n\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://github.com/TooTouch/BalancedSoftmax/blob/main/assets/figure4.jpg?raw=true\"\u003e\u003cbr\u003eFigure 4. Imbalance factor에 따른 실험 결과\n\u003c/p\u003e\n\n\n\u003ctable border=\"1\" class=\"dataframe\"\u003e\n  \u003ccaption\u003e\n    Table 1. Imbalance factor에 따른 실험 결과\n  \u003c/caption\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eDataset\u003c/th\u003e\n      \u003cth colspan=\"5\" halign=\"left\"\u003eCIFAR10LT\u003c/th\u003e\n      \u003cth colspan=\"5\" halign=\"left\"\u003eCIFAR100LT\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eImbalance factor\u003c/th\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003cth\u003e10\u003c/th\u003e\n      \u003cth\u003e50\u003c/th\u003e\n      \u003cth\u003e100\u003c/th\u003e\n      \u003cth\u003e200\u003c/th\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003cth\u003e10\u003c/th\u003e\n      \u003cth\u003e50\u003c/th\u003e\n      \u003cth\u003e100\u003c/th\u003e\n      \u003cth\u003e200\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003eCrossEntropyLoss\u003c/th\u003e\n      \u003ctd\u003e0.9283\u003c/td\u003e\n      \u003ctd\u003e0.8525\u003c/td\u003e\n      \u003ctd\u003e0.7078\u003c/td\u003e\n      \u003ctd\u003e0.6421\u003c/td\u003e\n      \u003ctd\u003e0.5570\u003c/td\u003e\n      \u003ctd\u003e0.7313\u003c/td\u003e\n      \u003ctd\u003e0.5696\u003c/td\u003e\n      \u003ctd\u003e0.4440\u003c/td\u003e\n      \u003ctd\u003e0.4067\u003c/td\u003e\n      \u003ctd\u003e0.3921\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eBalancedSoftmax\u003c/th\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.8762\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.8027\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.7633\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.7070\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.6058\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.5202\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.4715\u003c/strong\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cstrong\u003e0.4301\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://github.com/TooTouch/BalancedSoftmax/blob/main/assets/figure5.jpg?raw=true\"\u003e\u003cbr\u003eFigure 5. Imbalance factor에 따른 실험 결과 class별 성능\n\u003c/p\u003e\n\n\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://github.com/TooTouch/BalancedSoftmax/blob/main/assets/figure6.jpg?raw=true\"\u003e\u003cbr\u003eFigure 6. CIFAR10LT에 대한 cross entropy와 balanced softmax 간 confusion matrix 비교. Imbalance factor(IF)는 200.\n\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftootouch%2Fbalancedsoftmax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftootouch%2Fbalancedsoftmax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftootouch%2Fbalancedsoftmax/lists"}