{ "cells": [ { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "import torch\n", "import torchvision\n", "from torch import nn, optim\n", "from torch.autograd import Variable\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "mnist_data = torchvision.datasets.MNIST(\n", " \"mnist_data\", train=True, transform=torchvision.transforms.ToTensor(), download=True\n", ")\n", "mnist_dataloader = torch.utils.data.DataLoader(mnist_data, batch_size=50)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "class Mnet(nn.Module):\n", " def __init__(self):\n", " super(Mnet, self).__init__()\n", " self.linear1 = nn.Linear(28 * 28, 400)\n", " self.linear2 = nn.Linear(400, 200)\n", " self.linear3 = nn.Linear(200, 100)\n", " self.linear4 = nn.Linear(100, 50)\n", " self.linear5 = nn.Linear(50, 25)\n", " self.final_linear = nn.Linear(25, 10)\n", "\n", " self.relu = nn.ReLU()\n", "\n", " def forward(self, images):\n", " x = images.view(-1, 28 * 28)\n", " x = self.relu(self.linear1(x))\n", " x = self.relu(self.linear2(x))\n", " x = self.relu(self.linear3(x))\n", " x = self.relu(self.linear4(x))\n", " x = self.relu(self.linear5(x))\n", " x = self.final_linear(x)\n", " return x" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 50/50 [21:18<00:00, 25.57s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "final loss: 1.1586851087486139e-06\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "from tqdm import tqdm\n", "model = Mnet()\n", "cec_loss = nn.CrossEntropyLoss()\n", "params = model.parameters()\n", "optimizer = optim.Adam(params=params, lr=0.001)\n", "\n", "n_epochs = 50\n", "n_iterations = 0\n", "\n", "for e in tqdm(range(n_epochs)):\n", " for i, (images, labels) in enumerate(mnist_dataloader):\n", " output = model(images)\n", "\n", " model.zero_grad()\n", " loss = cec_loss(output, labels)\n", " loss.backward()\n", "\n", " optimizer.step()\n", " n_iterations+=1\n", "\n", "print(f'final loss: {loss.item()}')" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "torch.save(model, \"mnistmodel.pt\")" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.10" } }, "nbformat": 4, "nbformat_minor": 2 }