swi-ml
A machine learning library written from scratch - with runtime switchable backend!
Provides a single interface to interact with single-core CPU operations (with NumPy backend), as well as thousands of cores on a GPU (with CuPy backend), in runtime!
NOTE: This is NOT an alternative to libraries like scikit-learn and cuML. Their interfaces are complete on their own!
Prerequsites
swi-ml is built on bare Python and NumPy backbones, all other dependencies are optional!
- NumPy
- CuPy (Optional)
- Matplotlib (Optional)
Installation
- (Optional) Setup a virtual environment using
virtualenvoranaconda. - Install NumPy by following their insallation guide or simply via
pip:pip install numpy - (Optional) For GPU-supported backend, setup a working installation of CuPy by following their installation guide.
python -c 'import cupy; cupy.show_config()' - (Optional) Install Matplotlib to plot specific curves. (via their installation guide)
- Install
swi-ml:pip install swi-ml # from PyPI pip install git+https://github.com/aitikgupta/swi-ml # from GitHub
- (Optional) To run the pre-defined tests, install pytest by following their installation guide or simply via
pip:pip install pytest
Usage
Switching backend
from swi_ml import set_backend
# numpy backend (CPU)
set_backend("numpy")
# cupy backend (GPU)
set_backend("cupy")
Automatic fallback
Don't have a physical GPU, or don't know if you have a proper setup for a GPU-enabled backend?
Set automatic fallback (to NumPy - the only hard dependency):
from swi_ml import set_automatic_fallback
# this has been enabled by default for tests
# see https://github.com/aitikgupta/swi-ml/blob/master/tests/__init__.py
set_automatic_fallback(True)
A simple Linear Regression with Gradient Descent
from swi_ml.regression import LinearRegressionGD
data = [[1], [2], [3]]
labels = [2, 4, 6]
model = LinearRegressionGD(
num_iterations=3,
learning_rate=0.1,
normalize=False,
initialiser="uniform",
verbose="DEBUG",
)
model.fit(data, labels)
print("Current MSE:", model.curr_loss)
Output:
INFO: Backend is not set, using default `numpy`
INFO: Setting backend: numpy
INFO: MSE (1/3): 13.93602
INFO: MSE (2/3): 0.22120
INFO: MSE (3/3): 0.05478
INFO: Training time: 0.00035 seconds
Current MSE: 0.054780625247184585
For more concrete examples, please refer to examples directory.
Running the tests
To run the testing suite, execute the following command in the root directory:
python -mpytest # run the whole suite
python -mpytest tests/test_module.py # run the specific test module
Contributing
Contributions are what makes the open source community such an amazing place to learn, inspire, and create. Any contributions are much appreciated!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
License
Distributed under the MIT License. See LICENSE for more information.
Acknowledgements
- Logo created at LogoMakr.com
- Img Shields
- Choose an Open Source License
About
Aitik Gupta - Personal Website
Metadata
Release files for swi-ml 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| swi-ml-0.0.1.tar.gz | 13.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| swi_ml-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.3 kB
Release files / swi-ml-0.0.1.tar.gz
| Download URL | swi-ml-0.0.1.tar.gz |
|---|---|
| Size | 13.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c55c970d1c4919bf9f24a8f0319ae6c9b50e6116e09b197ccb034a515b829c9d
|
|
BLAKE2b-256 checksum How to use checksums |
52cc7ee657006469ce61825e210cf8ba602337a9c4212d05f92a3bbb2008046a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/51.0.0.post20201207 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.7.9
|
Release files / swi_ml-0.0.1-py3-none-any.whl
| Download URL | swi_ml-0.0.1-py3-none-any.whl |
|---|---|
| Size | 18.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7c230e513dc162916448c799ca0701abaeb1a92ebf69f3bc12b2992483bdac41
|
|
BLAKE2b-256 checksum How to use checksums |
f45e08905cf1646dbc2319f1479347a8442d15727f0c2ccec8e684e08bc9cb2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/51.0.0.post20201207 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.7.9
|