{"id":17324228,"url":"https://github.com/datngu/train_pytorch","last_synced_at":"2026-05-01T10:31:45.712Z","repository":{"id":215483841,"uuid":"739080013","full_name":"datngu/train_pytorch","owner":"datngu","description":"Simple trainer for pytorch","archived":false,"fork":false,"pushed_at":"2024-01-09T10:23:20.000Z","size":52,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-05T06:00:03.350Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/datngu.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":"2024-01-04T18:13:57.000Z","updated_at":"2024-01-04T18:15:07.000Z","dependencies_parsed_at":"2025-02-01T09:37:30.288Z","dependency_job_id":null,"html_url":"https://github.com/datngu/train_pytorch","commit_stats":null,"previous_names":["datngu/train_pytorch"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/datngu/train_pytorch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datngu%2Ftrain_pytorch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datngu%2Ftrain_pytorch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datngu%2Ftrain_pytorch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datngu%2Ftrain_pytorch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datngu","download_url":"https://codeload.github.com/datngu/train_pytorch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datngu%2Ftrain_pytorch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32494270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"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-10-15T14:10:04.340Z","updated_at":"2026-05-01T10:31:45.691Z","avatar_url":"https://github.com/datngu.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Train-Pytorch\n\nSimlified pytorch training!\n\nPyPI project: https://pypi.org/project/train-pytorch/\n\nThe package provide:\n- A basic `Trainer` class to facilidate pytorch model training.\n- Some functions to compute common accuracy metrics including:\n    - `binary_AUC`\n    - `binary_accuracy`\n    - `multiple_class_accuracy`\n    - `regression_r2`\n\n\nYou can also define your own function to input into the `Trainer` class as long as your function can:\n- take 2 inputs: `logits` and `labels`\n- perform all computation on: `torch.tensor` \n- return a python value by: `value.item()`\n\nAn example of our provided `binary_accuracy` function is:\n\n```python\n\ndef binary_accuracy(logits, labels, cutoff=0):\n    \"\"\"\n    Calculate binary accuracy given model logits and true labels.\n\n    Parameters:\n        - logits (torch.Tensor): Model logits or predicted scores (output before activation function).\n        - labels (torch.Tensor): True binary labels (0 or 1).\n        - cutoff (float, optional): Threshold for binary classification (default is 0).\n\n    Returns:\n        - float: Binary accuracy.\n\n    Example:\n        logits = torch.tensor([0.2, 0.7, 0.4, 0.9])\n        labels = torch.tensor([0, 1, 0, 1])\n        accuracy = binary_accuracy(logits, labels, cutoff=0.5)\n        print(\"Binary Accuracy:\", accuracy)\n    \"\"\"\n\n    # Ensure logits and labels are on the CPU\n    logits, labels = logits.cpu(), labels.cpu()\n    # Convert logits to binary predictions using the specified cutoff\n    predicts = (logits \u003e cutoff).float()\n    # Calculate binary accuracy\n    accuracy = (predicts == labels).float().mean()\n    # Return the binary accuracy as a float\n    return accuracy.item()\n\n```\n\n\n\n\n\n## 1. Installation\n\nFrom Github:\n\n```console\ngit clone https://github.com/datngu/train_pytorch\ncd train_pytorch\npip install .\n```\n\nFrom PyPI:\n\n```console\npip install train-pytorch\n```\n\n\n## 1. Example on the MNIST dataset with multiple_class_accuracy\n\n### 1.1 Load your libraries\n```python\n\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\nfrom torch.utils.data import DataLoader\n\n## import train_pytorch packages and metric functions\nfrom train_pytorch import Trainer, binary_accuracy, multiple_class_accuracy, regression_r2\n\n```\n\n### 1.2 Load your dataset\n\n```python\n\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\ntrain_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)\ntest_dataset = datasets.MNIST(root='./data', train=False, transform=transform, download=True)\n\ntrain_loader = DataLoader(train_dataset, batch_size=512, shuffle=True)\ntest_loader = DataLoader(test_dataset, batch_size=512, shuffle=False)\n\n```\n\n### 1.3 Buid your model\n\n```python\n\nclass CNNModel(nn.Module):\n    def __init__(self):\n        super(CNNModel, self).__init__()\n        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)\n        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)\n        self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)\n        self.fc1 = nn.Linear(64 * 7 * 7, 128)\n        self.fc2 = nn.Linear(128, 10)\n\n    def forward(self, x):\n        x = self.pool(torch.relu(self.conv1(x)))\n        x = self.pool(torch.relu(self.conv2(x)))\n        x = x.view(-1, 64 * 7 * 7)\n        x = torch.relu(self.fc1(x))\n        x = self.fc2(x)\n        return x\n\n\n```\n\n\n### 1.4 Let's train it!\n\n```python\n\nmodel = CNNModel()\n\n## GPU: optional\n#device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"mps\")\n#model.to(device)\n\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\n\ntrainer = Trainer(model, criterion, optimizer, multiple_class_accuracy, num_epochs = 10, early_stoper = 5)\n\ntrainer.fit(train_loader, train_loader, './output_dir')\n\n```\n\n\n## 2. Example on the sklearn breast_cancer dataset with binary_accuracy\n\n### 2.1 Load your libraries\n```python\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.datasets import load_breast_cancer\nfrom torch.utils.data import Dataset, DataLoader\n\n## import train_pytorch packages and metric functions\nfrom train_pytorch import Trainer, binary_accuracy, multiple_class_accuracy, regression_r2\n\n```\n\n\n### 2.2 Load your dataset\n\n```python\n\ndata = load_breast_cancer()\nx = data['data']\ny = data['target']\n\nsc = StandardScaler()\nx = sc.fit_transform(x)\n\n## create dataset class\nclass dataset(Dataset):\n  def __init__(self,x,y):\n    self.x = torch.tensor(x,dtype=torch.float32)\n    self.y = torch.tensor(y,dtype=torch.float32)\n    self.length = self.x.shape[0]\n \n  def __getitem__(self,idx):\n    return self.x[idx],self.y[idx]\n  def __len__(self):\n    return self.length\n      \n# a bit lazy to slipt train and test data, but it is okey for tutorial :D      \ntrain_data = dataset(x,y)\nval_data = dataset(x,y)\n\ntrain_loader = DataLoader(train_data,batch_size=64,shuffle=False)\nval_loader = DataLoader(val_data,batch_size=64,shuffle=False)\n\n\n```\n\n\n### 2.3 Buid your model\n\n```python\n\nclass Net(nn.Module):\n  def __init__(self,input_shape):\n    super(Net,self).__init__()\n    self.fc1 = nn.Linear(input_shape,32)\n    self.fc2 = nn.Linear(32,64)\n    self.fc3 = nn.Linear(64,1)\n  def forward(self,x):\n    x = torch.relu(self.fc1(x))\n    x = torch.relu(self.fc2(x))\n    x = self.fc3(x)\n    return x\n\n\n```\n\n\n### 2.4 Let's train it!\n\n```python\n\nmodel = Net(input_shape=x.shape[1])\n\n## GPU: optional\n#device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"mps\")\n#model.to(device)\n\noptimizer = torch.optim.SGD(model.parameters(),lr=0.1)\nloss_fn = nn.BCEWithLogitsLoss()\n\n\ntrainer = Trainer(model, loss_fn, optimizer, binary_accuracy, num_epochs=10)\ntrainer.fit(train_loader, val_loader, './output_dir')\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatngu%2Ftrain_pytorch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatngu%2Ftrain_pytorch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatngu%2Ftrain_pytorch/lists"}