Example usage
To use fundaml in a project:
!pip install --upgrade fundaml
import fundaml
print(fundaml.__version__)
Requirement already satisfied: fundaml in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (0.1.27)
Collecting fundaml
Downloading fundaml-0.1.29-py3-none-any.whl (8.8 kB)
Requirement already satisfied: numpy>=1.24.0 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from fundaml) (1.25.0)
Requirement already satisfied: pandas>=1.4.0 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from fundaml) (2.0.3)
Requirement already satisfied: torch<3.0.0,>=2.0.1 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from fundaml) (2.0.1)
Requirement already satisfied: torchaudio<3.0.0,>=2.0.2 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from fundaml) (2.0.2)
Requirement already satisfied: torchvision<0.16.0,>=0.15.2 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from fundaml) (0.15.2)
Requirement already satisfied: python-dateutil>=2.8.2 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from pandas>=1.4.0->fundaml) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from pandas>=1.4.0->fundaml) (2023.3)
Requirement already satisfied: tzdata>=2022.1 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from pandas>=1.4.0->fundaml) (2023.3)
Requirement already satisfied: filelock in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from torch<3.0.0,>=2.0.1->fundaml) (3.12.2)
Requirement already satisfied: typing-extensions in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from torch<3.0.0,>=2.0.1->fundaml) (4.7.1)
Requirement already satisfied: sympy in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from torch<3.0.0,>=2.0.1->fundaml) (1.12)
Requirement already satisfied: networkx in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from torch<3.0.0,>=2.0.1->fundaml) (3.1)
Requirement already satisfied: jinja2 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from torch<3.0.0,>=2.0.1->fundaml) (3.1.2)
Requirement already satisfied: requests in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from torchvision<0.16.0,>=0.15.2->fundaml) (2.31.0)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from torchvision<0.16.0,>=0.15.2->fundaml) (10.0.0)
Requirement already satisfied: six>=1.5 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas>=1.4.0->fundaml) (1.16.0)
Requirement already satisfied: MarkupSafe>=2.0 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from jinja2->torch<3.0.0,>=2.0.1->fundaml) (2.1.3)
Requirement already satisfied: charset-normalizer<4,>=2 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from requests->torchvision<0.16.0,>=0.15.2->fundaml) (3.1.0)
Requirement already satisfied: idna<4,>=2.5 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from requests->torchvision<0.16.0,>=0.15.2->fundaml) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from requests->torchvision<0.16.0,>=0.15.2->fundaml) (2.0.3)
Requirement already satisfied: certifi>=2017.4.17 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from requests->torchvision<0.16.0,>=0.15.2->fundaml) (2023.5.7)
Requirement already satisfied: mpmath>=0.19 in /Users/tzoght/opt/miniconda3/envs/fundaml/lib/python3.10/site-packages (from sympy->torch<3.0.0,>=2.0.1->fundaml) (1.3.0)
Installing collected packages: fundaml
Attempting uninstall: fundaml
Found existing installation: fundaml 0.1.27
Uninstalling fundaml-0.1.27:
Successfully uninstalled fundaml-0.1.27
Successfully installed fundaml-0.1.29
0.1.27
eda submodule
from fundaml.eda import print_basic_eda
import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
print_basic_eda(df)
----------------------------------------
Shape: (3, 2)
----------------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 a 3 non-null int64
1 b 3 non-null int64
dtypes: int64(2)
memory usage: 176.0 bytes
----------------------------------------
Null:
a 0
b 0
dtype: int64
----------------------------------------
Describe:
a b
count 3.0 3.0
mean 2.0 5.0
std 1.0 1.0
min 1.0 4.0
25% 1.5 4.5
50% 2.0 5.0
75% 2.5 5.5
max 3.0 6.0
----------------------------------------
NA:
a 0
b 0
dtype: int64
----------------------------------------
Duplicate:
0
----------------------------------------
Duplicated:
0 False
1 False
2 False
dtype: bool
Training a Neural Network Classifier
from fundaml.models import SampleNNClassifier
from fundaml.trainers import NNTrainer, get_available_devices
from fundaml.scores import score_accuracy
import unittest
import torch
from torch import Tensor
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor
training_data = datasets.FashionMNIST(
root="data",
train=True,
download=True,
transform=ToTensor()
)
test_data = datasets.FashionMNIST(
root="data",
train=False,
download=True,
transform=ToTensor()
)
learning_rate = 1e-3
batch_size = 64
epochs = 1
weight_decay = 0.01
train_dataloader = DataLoader(training_data, batch_size=batch_size)
test_dataloader = DataLoader(test_data, batch_size=batch_size)
model = SampleNNClassifier(short_name="Sample_NN_Classifier")
loss_fn = nn.CrossEntropyLoss()
trainer = NNTrainer()
# optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate, weight_decay=weight_decay, betas=(0.9, 0.99), eps=1e-8)
print(f"Available devices on this machine: {get_available_devices()}")
trainer.with_model(model).with_optimizer(optimizer).with_loss_function(loss_fn)
trainer.with_scoring_functions({'accuracy':score_accuracy}).with_device('cpu')
# scores = trainer.train_loop(train_dataloader,update_every_n_batches=20,epochs=epochs)
# scores = trainer.test_loop(test_dataloader,update_every_n_batches=2)
scores = trainer.train_test_loop(train_dataloader, test_dataloader,update_every_n_batches=100, epochs=5)
# print(scores)
Available devices on this machine: [device(type='mps')]
Using device: cpu
In training [ 64/60000] epoch: 1 loss: 2.301378 accuracy 0.125
In training [ 6464/60000] epoch: 1 loss: 0.548937 accuracy 0.796875
In training [12864/60000] epoch: 1 loss: 0.403776 accuracy 0.859375
In training [19264/60000] epoch: 1 loss: 0.509262 accuracy 0.828125
In training [25664/60000] epoch: 1 loss: 0.466876 accuracy 0.796875
In training [32064/60000] epoch: 1 loss: 0.446234 accuracy 0.8125
In training [38464/60000] epoch: 1 loss: 0.365968 accuracy 0.84375
In training [44864/60000] epoch: 1 loss: 0.513393 accuracy 0.8125
In training [51264/60000] epoch: 1 loss: 0.461992 accuracy 0.84375
In training [57664/60000] epoch: 1 loss: 0.519337 accuracy 0.828125
In training [30016/60000] epoch: 1 loss: 0.351558 accuracy 0.8125
In testing [ 64/10000] epoch: 1 loss: 0.316642 accuracy 0.84375
In testing [ 6464/10000] epoch: 1 loss: 0.386479 accuracy 0.84375
In training [ 64/60000] epoch: 2 loss: 0.262214 accuracy 0.90625
In training [ 6464/60000] epoch: 2 loss: 0.364398 accuracy 0.890625
In training [12864/60000] epoch: 2 loss: 0.269503 accuracy 0.859375
In training [19264/60000] epoch: 2 loss: 0.375651 accuracy 0.828125
In training [25664/60000] epoch: 2 loss: 0.428343 accuracy 0.796875
In training [32064/60000] epoch: 2 loss: 0.391344 accuracy 0.828125
In training [38464/60000] epoch: 2 loss: 0.325320 accuracy 0.875
In training [44864/60000] epoch: 2 loss: 0.457571 accuracy 0.8125
In training [51264/60000] epoch: 2 loss: 0.388944 accuracy 0.84375
In training [57664/60000] epoch: 2 loss: 0.450031 accuracy 0.796875
In training [30016/60000] epoch: 2 loss: 0.271165 accuracy 0.8125
In testing [ 64/10000] epoch: 2 loss: 0.295752 accuracy 0.875
In testing [ 6464/10000] epoch: 2 loss: 0.342953 accuracy 0.890625
In training [ 64/60000] epoch: 3 loss: 0.235921 accuracy 0.9375
In training [ 6464/60000] epoch: 3 loss: 0.326183 accuracy 0.890625
In training [12864/60000] epoch: 3 loss: 0.226515 accuracy 0.875
In training [19264/60000] epoch: 3 loss: 0.328245 accuracy 0.84375
In training [25664/60000] epoch: 3 loss: 0.383195 accuracy 0.859375
In training [32064/60000] epoch: 3 loss: 0.315123 accuracy 0.84375
In training [38464/60000] epoch: 3 loss: 0.289108 accuracy 0.859375
In training [44864/60000] epoch: 3 loss: 0.456471 accuracy 0.859375
In training [51264/60000] epoch: 3 loss: 0.348210 accuracy 0.859375
In training [57664/60000] epoch: 3 loss: 0.356107 accuracy 0.796875
In training [30016/60000] epoch: 3 loss: 0.262893 accuracy 0.875
In testing [ 64/10000] epoch: 3 loss: 0.306127 accuracy 0.84375
In testing [ 6464/10000] epoch: 3 loss: 0.325759 accuracy 0.875
Early stopping!