{"id":13738565,"url":"https://github.com/soroushj/keras-balanced-batch-generator","last_synced_at":"2025-04-08T11:51:01.988Z","repository":{"id":54715777,"uuid":"166825819","full_name":"soroushj/keras-balanced-batch-generator","owner":"soroushj","description":"A Keras-compatible generator for creating balanced batches","archived":false,"fork":false,"pushed_at":"2024-03-23T06:52:05.000Z","size":17,"stargazers_count":16,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-16T21:48:50.943Z","etag":null,"topics":["keras","machine-learning","machine-learning-algorithms"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soroushj.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":"2019-01-21T14:16:13.000Z","updated_at":"2025-01-18T23:46:29.000Z","dependencies_parsed_at":"2024-11-15T05:32:02.662Z","dependency_job_id":null,"html_url":"https://github.com/soroushj/keras-balanced-batch-generator","commit_stats":{"total_commits":32,"total_committers":1,"mean_commits":32.0,"dds":0.0,"last_synced_commit":"2575911166052d111c4562f36a24bee3ba1e3b46"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soroushj%2Fkeras-balanced-batch-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soroushj%2Fkeras-balanced-batch-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soroushj%2Fkeras-balanced-batch-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soroushj%2Fkeras-balanced-batch-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soroushj","download_url":"https://codeload.github.com/soroushj/keras-balanced-batch-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247838415,"owners_count":21004576,"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","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":["keras","machine-learning","machine-learning-algorithms"],"created_at":"2024-08-03T03:02:27.241Z","updated_at":"2025-04-08T11:51:01.956Z","avatar_url":"https://github.com/soroushj.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# keras-balanced-batch-generator: A Keras-compatible generator for creating balanced batches\n\n[![PyPI](https://img.shields.io/pypi/v/keras-balanced-batch-generator.svg)](https://pypi.org/project/keras-balanced-batch-generator/)\n[![MIT license](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT)\n\n## Installation\n\n```bash\npip install keras-balanced-batch-generator\n```\n\n## Overview\n\nThis module implements an over-sampling algorithm to address the issue of class imbalance.\nIt generates *balanced batches*, i.e., batches in which the number of samples from each class is on average the same.\nGenerated batches are also shuffled.\n\nThe generator can be easily used with Keras models'\n[`fit`](https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit) method.\n\nCurrently, only [NumPy arrays](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html) for single-input, single-output models are supported.\n\n## API\n\n```python\nmake_generator(x, y, batch_size,\n               categorical=True,\n               seed=None)\n```\n\n- **`x`** *(numpy.ndarray)* Input data. Must have the same length as `y`.\n- **`y`** *(numpy.ndarray)* Target data. Must be a binary class matrix (i.e., shape `(num_samples, num_classes)`).\n  You can use [`keras.utils.to_categorical`](https://www.tensorflow.org/api_docs/python/tf/keras/utils/to_categorical) to convert a class vector to a binary class matrix.\n- **`batch_size`** *(int)* Batch size.\n- **`categorical`** *(bool)* If true, generates binary class matrices (i.e., shape `(num_samples, num_classes)`) for batch targets.\n  Otherwise, generates class vectors (i.e., shape `(num_samples,)`).\n- **`seed`** Random seed (see the [docs](https://docs.python.org/3/library/random.html#random.seed)).\n- Returns a Keras-compatible generator yielding batches as `(x, y)` tuples.\n\n## Usage\n\n```python\nimport keras\nfrom keras_balanced_batch_generator import make_generator\n\nx = ...\ny = ...\nbatch_size = ...\nsteps_per_epoch = ...\nmodel = keras.models.Sequential(...)\n\ngenerator = make_generator(x, y, batch_size)\nmodel.fit(generator, steps_per_epoch=steps_per_epoch)\n```\n\n## Example: Multiclass Classification\n\n```python\nimport numpy as np\nimport keras\nfrom keras_balanced_batch_generator import make_generator\n\nnum_samples = 100\nnum_classes = 3\ninput_shape = (2,)\nbatch_size = 16\n\nx = np.random.rand(num_samples, *input_shape)\ny = np.random.randint(low=0, high=num_classes, size=num_samples)\ny = keras.utils.to_categorical(y)\n\ngenerator = make_generator(x, y, batch_size)\n\nmodel = keras.models.Sequential()\nmodel.add(keras.layers.Dense(32, input_shape=input_shape, activation='relu'))\nmodel.add(keras.layers.Dense(num_classes, activation='softmax'))\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\nmodel.fit(generator, steps_per_epoch=10, epochs=5)\n```\n\n## Example: Binary Classification\n\n```python\nimport numpy as np\nimport keras\nfrom keras_balanced_batch_generator import make_generator\n\nnum_samples = 100\nnum_classes = 2\ninput_shape = (2,)\nbatch_size = 16\n\nx = np.random.rand(num_samples, *input_shape)\ny = np.random.randint(low=0, high=num_classes, size=num_samples)\ny = keras.utils.to_categorical(y)\n\ngenerator = make_generator(x, y, batch_size, categorical=False)\n\nmodel = keras.models.Sequential()\nmodel.add(keras.layers.Dense(32, input_shape=input_shape, activation='relu'))\nmodel.add(keras.layers.Dense(1, activation='sigmoid'))\nmodel.compile(optimizer='adam', loss='binary_crossentropy', metrics=['binary_accuracy'])\nmodel.fit(generator, steps_per_epoch=10, epochs=5)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoroushj%2Fkeras-balanced-batch-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoroushj%2Fkeras-balanced-batch-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoroushj%2Fkeras-balanced-batch-generator/lists"}