{"id":947,"date":"2025-04-21T02:26:07","date_gmt":"2025-04-20T17:26:07","guid":{"rendered":"https:\/\/www.dogrow.net\/nnet\/?p=947"},"modified":"2025-06-28T11:46:37","modified_gmt":"2025-06-28T02:46:37","slug":"blog30-pytorch%e3%81%a7mnist-%e2%98%85rtx5070ti%e3%81%a7%e3%81%aa%e3%81%8b%e3%81%aa%e3%81%8b%e9%ab%98%e9%80%9f%ef%bc%81","status":"publish","type":"post","link":"https:\/\/www.dogrow.net\/nnet\/blog30-pytorch%e3%81%a7mnist-%e2%98%85rtx5070ti%e3%81%a7%e3%81%aa%e3%81%8b%e3%81%aa%e3%81%8b%e9%ab%98%e9%80%9f%ef%bc%81\/","title":{"rendered":"(30)\u3010PyTorch\u3067MNIST #1\u3011GeForce RTX 5070ti\u3067\u9ad8\u901f\u5b9f\u884c"},"content":{"rendered":"<h1 class=\"my_h\">\u30101\u3011\u3084\u308a\u305f\u3044\u3053\u3068<\/h1>\n<p>NVIDIA GeForce RTX5070ti\u3092\u5165\u624b\u3057\u305f\u306e\u3067\u3001PyTorch\u3092\u52d5\u304b\u3057\u3066\u307f\u305f\u3044\u3002<br \/>\nMNIST 1epoch\u304c\u4f55\u79d2\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u304b\uff1f<\/p>\n<p>RTX 5070ti\u642d\u8f09\u30de\u30b7\u30f3\u3078\u306e PyTorch\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u306f\u3053\u3061\u3089\u3092\u53c2\u7167\u306e\u3053\u3068\u3002<br \/>\n<a href=\"https:\/\/www.dogrow.net\/linux\/blog163-ubuntu24-04%e3%81%abnvidia%e3%83%89%e3%83%a9%e3%82%a4%e3%83%90%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b%e3%80%82\/\" target=\"_blank\">(163) Ubuntu 24.04\u306b NVIDIA\u30c9\u30e9\u30a4\u30d0\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3002<\/a><br \/>\n<a href=\"https:\/\/www.dogrow.net\/python\/blog128-rtx-5070ti%e3%81%a7-pytorch%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99%e3%80%82\/\" target=\"_blank\">(128) RTX 5070ti\u3067 PyTorch\u3092\u52d5\u304b\u3059\u3002<\/a><\/p>\n<h1 class=\"my_h\">\u30102\u3011\u3084\u3063\u3066\u307f\u305f<\/h1>\n<h3 class=\"my_h\">(1) \u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5165\u624b<\/h3>\n<p>\u3053\u3061\u3089\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f7f\u308f\u305b\u3066\u3044\u305f\u3060\u3044\u305f\u3002<br \/>\n<a href=\"https:\/\/github.com\/pytorch\/examples\/tree\/main\/mnist\" target=\"_blank\">https:\/\/github.com\/pytorch\/examples\/tree\/main\/mnist<br \/>\n<img decoding=\"async\" src=\"https:\/\/www.dogrow.net\/nnet\/wp-content\/uploads\/2025\/04\/i001.jpg\" alt=\"\" class=\"my_add_bs1\" \/><\/a><\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nimport argparse\r\nimport torch\r\nimport torch.nn as nn\r\nimport torch.nn.functional as F\r\nimport torch.optim as optim\r\nfrom torchvision import datasets, transforms\r\nfrom torch.optim.lr_scheduler import StepLR\r\n\r\nclass Net(nn.Module):\r\n    def __init__(self):\r\n        super(Net, self).__init__()\r\n        self.conv1 = nn.Conv2d(1, 32, 3, 1)\r\n        self.conv2 = nn.Conv2d(32, 64, 3, 1)\r\n        self.dropout1 = nn.Dropout(0.25)\r\n        self.dropout2 = nn.Dropout(0.5)\r\n        self.fc1 = nn.Linear(9216, 128)\r\n        self.fc2 = nn.Linear(128, 10)\r\n\r\n    def forward(self, x):\r\n        x = self.conv1(x)\r\n        x = F.relu(x)\r\n        x = self.conv2(x)\r\n        x = F.relu(x)\r\n        x = F.max_pool2d(x, 2)\r\n        x = self.dropout1(x)\r\n        x = torch.flatten(x, 1)\r\n        x = self.fc1(x)\r\n        x = F.relu(x)\r\n        x = self.dropout2(x)\r\n        x = self.fc2(x)\r\n        output = F.log_softmax(x, dim=1)\r\n        return output\r\n\r\ndef train(args, model, device, train_loader, optimizer, epoch):\r\n    model.train()\r\n    for batch_idx, (data, target) in enumerate(train_loader):\r\n        data, target = data.to(device), target.to(device)\r\n        optimizer.zero_grad()\r\n        output = model(data)\r\n        loss = F.nll_loss(output, target)\r\n        loss.backward()\r\n        optimizer.step()\r\n        if batch_idx % args.log_interval == 0:\r\n            print(&#039;Train Epoch: {} &#x5B;{}\/{} ({:.0f}%)]\\tLoss: {:.6f}&#039;.format(\r\n                epoch, batch_idx * len(data), len(train_loader.dataset),\r\n                100. * batch_idx \/ len(train_loader), loss.item()))\r\n            if args.dry_run:\r\n                break\r\n\r\ndef test(model, device, test_loader):\r\n    model.eval()\r\n    test_loss = 0\r\n    correct = 0\r\n    with torch.no_grad():\r\n        for data, target in test_loader:\r\n            data, target = data.to(device), target.to(device)\r\n            output = model(data)\r\n            test_loss += F.nll_loss(output, target, reduction=&#039;sum&#039;).item()  # sum up batch loss\r\n            pred = output.argmax(dim=1, keepdim=True)  # get the index of the max log-probability\r\n            correct += pred.eq(target.view_as(pred)).sum().item()\r\n\r\n    test_loss \/= len(test_loader.dataset)\r\n\r\n    print(&#039;\\nTest set: Average loss: {:.4f}, Accuracy: {}\/{} ({:.2f}%)\\n&#039;.format(\r\n        test_loss, correct, len(test_loader.dataset),\r\n        100. * correct \/ len(test_loader.dataset)))\r\n\r\ndef main():\r\n    # Training settings\r\n    parser = argparse.ArgumentParser(description=&#039;PyTorch MNIST Example&#039;)\r\n    parser.add_argument(&#039;--batch-size&#039;, type=int, default=64, metavar=&#039;N&#039;,\r\n                        help=&#039;input batch size for training (default: 64)&#039;)\r\n    parser.add_argument(&#039;--test-batch-size&#039;, type=int, default=1000, metavar=&#039;N&#039;,\r\n                        help=&#039;input batch size for testing (default: 1000)&#039;)\r\n    parser.add_argument(&#039;--epochs&#039;, type=int, default=14, metavar=&#039;N&#039;,\r\n                        help=&#039;number of epochs to train (default: 14)&#039;)\r\n    parser.add_argument(&#039;--lr&#039;, type=float, default=1.0, metavar=&#039;LR&#039;,\r\n                        help=&#039;learning rate (default: 1.0)&#039;)\r\n    parser.add_argument(&#039;--gamma&#039;, type=float, default=0.7, metavar=&#039;M&#039;,\r\n                        help=&#039;Learning rate step gamma (default: 0.7)&#039;)\r\n    parser.add_argument(&#039;--no-cuda&#039;, action=&#039;store_true&#039;, default=False,\r\n                        help=&#039;disables CUDA training&#039;)\r\n    parser.add_argument(&#039;--no-mps&#039;, action=&#039;store_true&#039;, default=False,\r\n                        help=&#039;disables macOS GPU training&#039;)\r\n    parser.add_argument(&#039;--dry-run&#039;, action=&#039;store_true&#039;, default=False,\r\n                        help=&#039;quickly check a single pass&#039;)\r\n    parser.add_argument(&#039;--seed&#039;, type=int, default=1, metavar=&#039;S&#039;,\r\n                        help=&#039;random seed (default: 1)&#039;)\r\n    parser.add_argument(&#039;--log-interval&#039;, type=int, default=10, metavar=&#039;N&#039;,\r\n                        help=&#039;how many batches to wait before logging training status&#039;)\r\n    parser.add_argument(&#039;--save-model&#039;, action=&#039;store_true&#039;, default=False,\r\n                        help=&#039;For Saving the current Model&#039;)\r\n    args = parser.parse_args()\r\n    use_cuda = not args.no_cuda and torch.cuda.is_available()\r\n    use_mps = not args.no_mps and torch.backends.mps.is_available()\r\n\r\n    torch.manual_seed(args.seed)\r\n\r\n    if use_cuda:\r\n        device = torch.device(&quot;cuda&quot;)\r\n    elif use_mps:\r\n        device = torch.device(&quot;mps&quot;)\r\n    else:\r\n        device = torch.device(&quot;cpu&quot;)\r\n\r\n    train_kwargs = {&#039;batch_size&#039;: args.batch_size}\r\n    test_kwargs  = {&#039;batch_size&#039;: args.test_batch_size}\r\n    if use_cuda:\r\n        cuda_kwargs = {&#039;num_workers&#039;: 1,\r\n                       &#039;pin_memory&#039;: True,\r\n                       &#039;shuffle&#039;: True}\r\n        train_kwargs.update(cuda_kwargs)\r\n        test_kwargs.update(cuda_kwargs)\r\n\r\n    transform=transforms.Compose(&#x5B;\r\n        transforms.ToTensor(),\r\n        transforms.Normalize((0.1307,), (0.3081,))\r\n        ])\r\n    dataset1 = datasets.MNIST(&#039;..\/data&#039;, train=True, download=True,\r\n                       transform=transform)\r\n    dataset2 = datasets.MNIST(&#039;..\/data&#039;, train=False,\r\n                       transform=transform)\r\n    train_loader = torch.utils.data.DataLoader(dataset1,**train_kwargs)\r\n    test_loader = torch.utils.data.DataLoader(dataset2, **test_kwargs)\r\n\r\n    model = Net().to(device)\r\n    optimizer = optim.Adadelta(model.parameters(), lr=args.lr)\r\n\r\n    scheduler = StepLR(optimizer, step_size=1, gamma=args.gamma)\r\n    for epoch in range(1, args.epochs + 1):\r\n        train(args, model, device, train_loader, optimizer, epoch)\r\n        test(model, device, test_loader)\r\n        scheduler.step()\r\n\r\n    if args.save_model:\r\n        torch.save(model.state_dict(), &quot;mnist_cnn.pt&quot;)\r\n\r\nif __name__ == &#039;__main__&#039;:\r\n    main()\r\n<\/pre>\n<h3 class=\"my_h\">(2) MNIST\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u5165\u624b<\/h3>\n<p>\u904e\u53bb\u8a18\u4e8b <a href=\"https:\/\/www.dogrow.net\/nnet\/blog1\/\" target=\"_blank\">(1) MNIST\u753b\u50cf\u30c7\u30fc\u30bf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/a>\u3067\u7d39\u4ecb\u3057\u305f\u516c\u5f0f\u30da\u30fc\u30b8\u304c\u6d88\u3048\u3066\u3044\u308b\u30fb\u30fb\u30fb<\/p>\n<p>\u4eca\u56de\u306f\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u305b\u3066\u3044\u305f\u3060\u3044\u305f\u3002<br \/>\n<a href=\"https:\/\/systemds.apache.org\/datasets\/mnist\" target=\"_blank\">https:\/\/systemds.apache.org\/datasets\/mnist<br \/>\n<img decoding=\"async\" src=\"https:\/\/www.dogrow.net\/nnet\/wp-content\/uploads\/2025\/04\/i002.jpg\" alt=\"\" class=\"my_add_bs1\" \/><\/a><\/p>\n<h3 class=\"my_h\">(3) \u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u914d\u7f6e<\/h3>\n<p>main.py\u304b\u3089\u76f8\u5bfe\u30d1\u30b9\u3067\u4e0b\u8a18\u306e\u4f4d\u7f6e\u306b\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u7f6e\u304f\u3002<br \/>\n<span class=\"my_fc_blue\">..\/data\/MNIST\/raw\/<\/span><br \/>\n<span class=\"my_fc_crimson\">\u203bgz\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u51cd\u305b\u305a\u306b\u305d\u306e\u307e\u307e\u7f6e\u304f\u3053\u3068\u3002<\/span><\/p>\n<p>\u3067\u3082\u30fb\u30fb\u30fb<br \/>\ntorchvision.datasets.MNIST \u30af\u30e9\u30b9\u306f\u3068\u3066\u3082\u89aa\u5207\u3067\u3001\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u81ea\u52d5\u7684\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u308c\u308b\u306e\u3060\u305d\u3046\u306a\u3002<\/p>\n<h3 class=\"my_h\">(4) \u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c<\/h3>\n<p>PyTorch\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f Python\u4eee\u60f3\u74b0\u5883\u306b\u5165\u308a\u3001\u4ee5\u4e0b\u3092\u5b9f\u884c\u3059\u308b\u3002<\/p>\n<pre class=\"my_pre_bgBlack\">\r\n$ <span class='my_fc_yellow'>python main.py --epochs 1<\/span>\r\n<\/pre>\n<p>1 epoch\u6307\u5b9a\u3067\u5b9f\u884c\u3057\u305f\u7d50\u679c\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u6b63\u89e3\u7387\u306f98.42%\u3060\u3063\u305f\u3002<\/p>\n<pre class=\"my_pre_bgBlack\">\r\n$ <span class='my_fc_yellow'>python main.py --epochs 1<\/span>\r\n\/home\/hoge\/MNIST\/main.py:48: UserWarning: Converting a tensor with requires_grad=True to a scalar may lead to unexpected behavior.\r\nConsider using tensor.detach() first. (Triggered internally at \/pytorch\/aten\/src\/ATen\/native\/Scalar.cpp:22.)\r\n  100. * batch_idx \/ len(train_loader), loss.item()))\r\nTrain Epoch: 1 [0\/60000 (0%)]\tLoss: 2.285540\r\nTrain Epoch: 1 [640\/60000 (1%)]\tLoss: 1.665781\r\nTrain Epoch: 1 [1280\/60000 (2%)]\tLoss: 0.914229\r\nTrain Epoch: 1 [1920\/60000 (3%)]\tLoss: 0.535744\r\nTrain Epoch: 1 [2560\/60000 (4%)]\tLoss: 0.455426\r\nTrain Epoch: 1 [3200\/60000 (5%)]\tLoss: 0.411212\r\n\u3000\uff1a\r\nTrain Epoch: 1 [58240\/60000 (97%)]\tLoss: 0.101669\r\nTrain Epoch: 1 [58880\/60000 (98%)]\tLoss: 0.058996\r\nTrain Epoch: 1 [59520\/60000 (99%)]\tLoss: 0.078567\r\n\r\nTest set: Average loss: 0.0466, <span class='my_fc_lightpinkB'>Accuracy: 9842\/10000 (98.42%)<\/span>\r\n<\/pre>\n<p>\u6b21\u306b\u30013 epochs\u3060\u3068\u30fb\u30fb\u30fb 98.92%<\/p>\n<pre class=\"my_pre_bgBlack\">\r\n$ <span class='my_fc_yellow'>python main.py --epochs 3<\/span>\r\n :\r\nTest set: Average loss: 0.0338, <span class='my_fc_lightpinkB'>Accuracy: 9892\/10000 (98.92%)<\/span>\r\n<\/pre>\n<p>5 epochs\u3060\u3068\u30fb\u30fb\u30fb 99.09%<\/p>\n<pre class=\"my_pre_bgBlack\">\r\n$ <span class='my_fc_yellow'>python main.py --epochs 5<\/span>\r\n :\r\nTest set: Average loss: 0.0281, <span class='my_fc_lightpinkB'>Accuracy: 9909\/10000 (99.09%)<\/span>\r\n<\/pre>\n<p>10 epochs\u3060\u3068\u30fb\u30fb\u30fb 99.21%<\/p>\n<pre class=\"my_pre_bgBlack\">\r\n$ <span class='my_fc_yellow'>python main.py --epochs 10<\/span>\r\n :\r\nTest set: Average loss: 0.0244, <span class='my_fc_lightpinkB'>Accuracy: 9921\/10000 (99.21%)<\/span>\r\n<\/pre>\n<p>\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5c11\u3057\u6539\u9020\u3057\u3001epoch\u5404\u56de\u306e\u6b63\u89e3\u7387\u3092\u4e26\u3079\u3066\u8868\u793a\u3057\u3066\u307f\u305f\u3002<\/p>\n<pre class=\"my_pre_bgBlack\">\r\n$ <span class='my_fc_yellow'>python main2.py --epochs 10<\/span>\r\nuse cuda\r\nTest set (1): Average loss: 0.0461, <span class='my_fc_lightpinkB'>Accuracy: 9841\/10000 (98.41%)<\/span>\r\nTest set (2): Average loss: 0.0324, <span class='my_fc_lightpinkB'>Accuracy: 9896\/10000 (98.96%)<\/span>\r\nTest set (3): Average loss: 0.0334, <span class='my_fc_lightpinkB'>Accuracy: 9893\/10000 (98.93%)<\/span>\r\nTest set (4): Average loss: 0.0297, <span class='my_fc_lightpinkB'>Accuracy: 9903\/10000 (99.03%)<\/span>\r\nTest set (5): Average loss: 0.0264, <span class='my_fc_lightpinkB'>Accuracy: 9917\/10000 (99.17%)<\/span>\r\nTest set (6): Average loss: 0.0275, <span class='my_fc_lightpinkB'>Accuracy: 9916\/10000 (99.16%)<\/span>\r\nTest set (7): Average loss: 0.0264, <span class='my_fc_lightpinkB'>Accuracy: 9911\/10000 (99.11%)<\/span>\r\nTest set (8): Average loss: 0.0251, <span class='my_fc_lightpinkB'>Accuracy: 9922\/10000 (99.22%)<\/span>\r\nTest set (9): Average loss: 0.0264, <span class='my_fc_lightpinkB'>Accuracy: 9920\/10000 (99.20%)<\/span>\r\nTest set (10): Average loss: 0.0253, <span class='my_fc_lightpinkB'>Accuracy: 9918\/10000 (99.18%)<\/span>\r\n<\/pre>\n<h1 class=\"my_h\">\u30103\u3011\u6539\u9020\u3057\u3066\u307f\u308b<\/h1>\n<h3 class=\"my_h\">(1) \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u6210\u5909\u66f4\uff1a{\u5165\u529b\u5c64}\u2212{\u96a0\u308c\u5c64:\u30d5\u30eb\u63a5\u7d9a128}\u2212{\u51fa\u529b\u5c64}<\/h3>\n<p>main.py\u306e NET\u30af\u30e9\u30b9\u306e\u4e2d\u8eab\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u6539\u9020\u3057\u305f\u3002<br \/>\n\u4e0a\u8a18\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u3053\u306e\u90e8\u5206\u3060\u3051\u3092\u5909\u66f4\u3059\u308c\u3070\u3001\u30ec\u30a4\u30e4\u30fc\u69cb\u6210\u3092\u5909\u66f4\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nclass Net(nn.Module):\r\n    def __init__(self):\r\n        super(Net, self).__init__()\r\n        # 28x28\u306e\u753b\u50cf\u30921\u6b21\u5143\u306b\u30d5\u30e9\u30c3\u30c8\u5316 -&gt; \u5165\u529b\u30b5\u30a4\u30ba\u306f 784\r\n        self.fc1 = nn.Linear(28 * 28, 128)  # \u7b2c1\u96a0\u308c\u5c64\r\n        self.output = nn.Linear(128, 10)    # \u51fa\u529b\u5c64\uff0810\u30af\u30e9\u30b9\uff09\r\n\r\n    def forward(self, x):\r\n        x = x.view(-1, 28 * 28)  # \u30d5\u30e9\u30c3\u30c8\u5316\r\n        x = F.relu(self.fc1(x))  # \u96a0\u308c\u5c641 + ReLU\r\n        x = self.output(x)       # \u51fa\u529b\u5c64\uff08softmax\u524d\uff09\r\n        output = F.softmax(x, dim=1)  # softmax\u3067\u78ba\u7387\u5316\r\n        return output\r\n<\/pre>\n<p>\u5b9f\u884c\u7d50\u679c\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/p>\n<pre class=\"my_pre_bgBlack\">\r\nTest set (1): Average loss: -0.9397, <span class='my_fc_lightpinkB'>Accuracy: 9442\/10000 (94.42%)<\/span>\r\nTest set (2): Average loss: -0.9548, <span class='my_fc_lightpinkB'>Accuracy: 9592\/10000 (95.92%)<\/span>\r\nTest set (3): Average loss: -0.9633, <span class='my_fc_lightpinkB'>Accuracy: 9664\/10000 (96.64%)<\/span>\r\nTest set (4): Average loss: -0.9656, <span class='my_fc_lightpinkB'>Accuracy: 9683\/10000 (96.83%)<\/span>\r\nTest set (5): Average loss: -0.9674, <span class='my_fc_lightpinkB'>Accuracy: 9704\/10000 (97.04%)<\/span>\r\nTest set (6): Average loss: -0.9677, <span class='my_fc_lightpinkB'>Accuracy: 9712\/10000 (97.12%)<\/span>\r\nTest set (7): Average loss: -0.9694, <span class='my_fc_lightpinkB'>Accuracy: 9718\/10000 (97.18%)<\/span>\r\nTest set (8): Average loss: -0.9697, <span class='my_fc_lightpinkB'>Accuracy: 9728\/10000 (97.28%)<\/span>\r\nTest set (9): Average loss: -0.9697, <span class='my_fc_lightpinkB'>Accuracy: 9724\/10000 (97.24%)<\/span>\r\nTest set (10): Average loss: -0.9699, <span class='my_fc_lightpinkB'>Accuracy: 9726\/10000 (97.26%)<\/span>\r\n<\/pre>\n<h3 class=\"my_h\">(2) \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u6210\u5909\u66f4\uff1a{\u5165\u529b\u5c64}\u2212{\u96a0\u308c\u5c64:\u30d5\u30eb\u63a5\u7d9a256}\u2212{\u96a0\u308c\u5c64:\u30d5\u30eb\u63a5\u7d9a64}\u2212{\u51fa\u529b\u5c64}<\/h3>\n<p>main.py\u306e NET\u30af\u30e9\u30b9\u306e\u4e2d\u8eab\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u6539\u9020\u3057\u305f\u3002<br \/>\n\u4e0a\u8a18\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u3053\u306e\u90e8\u5206\u3060\u3051\u3092\u5909\u66f4\u3059\u308c\u3070\u3001\u30ec\u30a4\u30e4\u30fc\u69cb\u6210\u3092\u5909\u66f4\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nclass Net(nn.Module):\r\n    def __init__(self):\r\n        super(Net, self).__init__()\r\n        # 28x28\u306e\u753b\u50cf\u30921\u6b21\u5143\u306b\u30d5\u30e9\u30c3\u30c8\u5316 -&gt; \u5165\u529b\u30b5\u30a4\u30ba\u306f 784\r\n        self.fc1 = nn.Linear(28 * 28, 256)  # \u7b2c1\u96a0\u308c\u5c64\r\n        self.fc2 = nn.Linear(256, 64)       # \u7b2c2\u96a0\u308c\u5c64\r\n        self.output = nn.Linear(64, 10)     # \u51fa\u529b\u5c64\uff0810\u30af\u30e9\u30b9\uff09\r\n\r\n    def forward(self, x):\r\n        x = x.view(-1, 28 * 28)  # \u30d5\u30e9\u30c3\u30c8\u5316\r\n        x = F.relu(self.fc1(x))  # \u96a0\u308c\u5c641 + ReLU\r\n        x = F.relu(self.fc2(x))  # \u96a0\u308c\u5c642 + ReLU\r\n        x = self.output(x)       # \u51fa\u529b\u5c64\uff08softmax\u524d\uff09\r\n        output = F.softmax(x, dim=1)  # softmax\u3067\u78ba\u7387\u5316\r\n        return output\r\n<\/pre>\n<p>\u5b9f\u884c\u7d50\u679c\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/p>\n<pre class=\"my_pre_bgBlack\">\r\nTest set (1): Average loss: -0.9258, <span class='my_fc_lightpinkB'>Accuracy: 9289\/10000 (92.89%)<\/span>\r\nTest set (2): Average loss: -0.9520, <span class='my_fc_lightpinkB'>Accuracy: 9542\/10000 (95.42%)<\/span>\r\nTest set (3): Average loss: -0.9645, <span class='my_fc_lightpinkB'>Accuracy: 9659\/10000 (96.59%)<\/span>\r\nTest set (4): Average loss: -0.9683, <span class='my_fc_lightpinkB'>Accuracy: 9697\/10000 (96.97%)<\/span>\r\nTest set (5): Average loss: -0.9713, <span class='my_fc_lightpinkB'>Accuracy: 9725\/10000 (97.25%)<\/span>\r\nTest set (6): Average loss: -0.9729, <span class='my_fc_lightpinkB'>Accuracy: 9749\/10000 (97.49%)<\/span>\r\nTest set (7): Average loss: -0.9732, <span class='my_fc_lightpinkB'>Accuracy: 9745\/10000 (97.45%)<\/span>\r\nTest set (8): Average loss: -0.9736, <span class='my_fc_lightpinkB'>Accuracy: 9755\/10000 (97.55%)<\/span>\r\nTest set (9): Average loss: -0.9733, <span class='my_fc_lightpinkB'>Accuracy: 9742\/10000 (97.42%)<\/span>\r\nTest set (10): Average loss: -0.9739, <span class='my_fc_lightpinkB'>Accuracy: 9750\/10000 (97.50%)<\/span>\r\n<\/pre>\n<h1 class=\"my_h\">\u30104\u3011\u6240\u611f<\/h1>\n<p>\u30fb\u3044\u308d\u3044\u308d\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u69cb\u6210\u3092\u624b\u8efd\u306b\u8a66\u305b\u305d\u3046\u3002<br \/>\n\u30fb\u30c7\u30fc\u30bf\u3055\u3048\u63c3\u3048\u308c\u3070\u3001\u3044\u308d\u3044\u308d\u306a\u5b9f\u9a13\u306b\u6d3b\u7528\u3067\u304d\u305d\u3046\u3002<br \/>\n\u3000\u2193<br \/>\n\u30a2\u30a4\u30c7\u30a3\u30a2\u3055\u3048\u3042\u308c\u3070\u3001\u9762\u767d\u3044\u3053\u3068\u306b\u4f7f\u3048\u305d\u3046\u3060\uff01<\/p>\n<hr class=\"my_hr_bottom\">\n","protected":false},"excerpt":{"rendered":"<p>\u30101\u3011\u3084\u308a\u305f\u3044\u3053\u3068 NVIDIA GeForce RTX5070ti\u3092\u5165\u624b\u3057\u305f\u306e\u3067\u3001PyTorch\u3092\u52d5\u304b\u3057\u3066\u307f\u305f\u3044\u3002 MNIST 1epoch\u304c\u4f55\u79d2\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u304b\uff1f RTX 5070ti\u642d\u8f09\u30de\u30b7\u30f3\u3078\u306e PyTorch\u306e\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.dogrow.net\/nnet\/blog30-pytorch%e3%81%a7mnist-%e2%98%85rtx5070ti%e3%81%a7%e3%81%aa%e3%81%8b%e3%81%aa%e3%81%8b%e9%ab%98%e9%80%9f%ef%bc%81\/\">\u7d9a\u304d\u3092\u8aad\u3080 &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,18,16],"tags":[],"class_list":["post-947","post","type-post","status-publish","format-standard","hentry","category-cuda","category-mnist","category-pytorch"],"views":1028,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts\/947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/comments?post=947"}],"version-history":[{"count":40,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts\/947\/revisions"}],"predecessor-version":[{"id":2954,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/posts\/947\/revisions\/2954"}],"wp:attachment":[{"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/media?parent=947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/categories?post=947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dogrow.net\/nnet\/wp-json\/wp\/v2\/tags?post=947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}