From 6d58a261d46b3370053a0f7790d3dc26834edffd Mon Sep 17 00:00:00 2001 From: "[wrh]" <[wangruiheng0018@163.com]> Date: Sat, 15 Jul 2023 00:25:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2、幸福感数据分析/第2组--王瑞恒/fnn.ipynb | 190 ++++++++++++---------- 1 file changed, 102 insertions(+), 88 deletions(-) diff --git a/2、幸福感数据分析/第2组--王瑞恒/fnn.ipynb b/2、幸福感数据分析/第2组--王瑞恒/fnn.ipynb index cfb5def..50b452e 100644 --- a/2、幸福感数据分析/第2组--王瑞恒/fnn.ipynb +++ b/2、幸福感数据分析/第2组--王瑞恒/fnn.ipynb @@ -2,28 +2,11 @@ "cells": [ { "cell_type": "code", - "execution_count": 15, + "execution_count": 2, "metadata": { "collapsed": true }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[4., 1., 1., ..., 0., 0., 0.],\n", - " [4., 1., 1., ..., 0., 0., 0.],\n", - " [4., 0., 3., ..., 0., 0., 0.],\n", - " ...,\n", - " [4., 1., 1., ..., 0., 0., 0.],\n", - " [3., 1., 1., ..., 0., 0., 0.],\n", - " [4., 1., 1., ..., 0., 0., 0.]])" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", @@ -33,22 +16,18 @@ "import pandas as pd\n", "import sklearn\n", "df=pd.read_csv(\"Analysis.csv\").drop(\"Unnamed: 0\",axis=1)\n", - "df=df.values\n", - "df" + "df=df.values" ] }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 3, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Running on the CPU\n" + "Running on the GPU\n" ] } ], @@ -71,14 +50,14 @@ "train_dataset, test_dataset = random_split(df, [train_size, test_size])\n", "train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True)\n", "test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False)" - ] + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 4, "outputs": [], "source": [ "import torch\n", @@ -124,41 +103,24 @@ " else:\n", " loss = batch_loss.sum()\n", " return loss" - ] + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "AssertionError", - "evalue": "Torch not compiled with CUDA enabled", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[18], line 21\u001b[0m\n\u001b[0;32m 19\u001b[0m device \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39mdevice(\u001b[39m\"\u001b[39m\u001b[39mcuda:0\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m 20\u001b[0m fnn \u001b[39m=\u001b[39m FNN()\n\u001b[1;32m---> 21\u001b[0m fnn \u001b[39m=\u001b[39m fnn\u001b[39m.\u001b[39;49mto(device)\n\u001b[0;32m 22\u001b[0m optimizer \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39moptim\u001b[39m.\u001b[39mAdam(fnn\u001b[39m.\u001b[39mparameters(), lr\u001b[39m=\u001b[39mLR) \u001b[39m# 定义优化器\u001b[39;00m\n\u001b[0;32m 23\u001b[0m loss_func \u001b[39m=\u001b[39m focal_loss_multi() \u001b[39m# 定义损失函数\u001b[39;00m\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\module.py:927\u001b[0m, in \u001b[0;36mModule.to\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 923\u001b[0m \u001b[39mreturn\u001b[39;00m t\u001b[39m.\u001b[39mto(device, dtype \u001b[39mif\u001b[39;00m t\u001b[39m.\u001b[39mis_floating_point() \u001b[39mor\u001b[39;00m t\u001b[39m.\u001b[39mis_complex() \u001b[39melse\u001b[39;00m \u001b[39mNone\u001b[39;00m,\n\u001b[0;32m 924\u001b[0m non_blocking, memory_format\u001b[39m=\u001b[39mconvert_to_format)\n\u001b[0;32m 925\u001b[0m \u001b[39mreturn\u001b[39;00m t\u001b[39m.\u001b[39mto(device, dtype \u001b[39mif\u001b[39;00m t\u001b[39m.\u001b[39mis_floating_point() \u001b[39mor\u001b[39;00m t\u001b[39m.\u001b[39mis_complex() \u001b[39melse\u001b[39;00m \u001b[39mNone\u001b[39;00m, non_blocking)\n\u001b[1;32m--> 927\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_apply(convert)\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\module.py:579\u001b[0m, in \u001b[0;36mModule._apply\u001b[1;34m(self, fn)\u001b[0m\n\u001b[0;32m 577\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_apply\u001b[39m(\u001b[39mself\u001b[39m, fn):\n\u001b[0;32m 578\u001b[0m \u001b[39mfor\u001b[39;00m module \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mchildren():\n\u001b[1;32m--> 579\u001b[0m module\u001b[39m.\u001b[39;49m_apply(fn)\n\u001b[0;32m 581\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mcompute_should_use_set_data\u001b[39m(tensor, tensor_applied):\n\u001b[0;32m 582\u001b[0m \u001b[39mif\u001b[39;00m torch\u001b[39m.\u001b[39m_has_compatible_shallow_copy_type(tensor, tensor_applied):\n\u001b[0;32m 583\u001b[0m \u001b[39m# If the new tensor has compatible tensor type as the existing tensor,\u001b[39;00m\n\u001b[0;32m 584\u001b[0m \u001b[39m# the current behavior is to change the tensor in-place using `.data =`,\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 589\u001b[0m \u001b[39m# global flag to let the user control whether they want the future\u001b[39;00m\n\u001b[0;32m 590\u001b[0m \u001b[39m# behavior of overwriting the existing tensor or not.\u001b[39;00m\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\module.py:602\u001b[0m, in \u001b[0;36mModule._apply\u001b[1;34m(self, fn)\u001b[0m\n\u001b[0;32m 598\u001b[0m \u001b[39m# Tensors stored in modules are graph leaves, and we don't want to\u001b[39;00m\n\u001b[0;32m 599\u001b[0m \u001b[39m# track autograd history of `param_applied`, so we have to use\u001b[39;00m\n\u001b[0;32m 600\u001b[0m \u001b[39m# `with torch.no_grad():`\u001b[39;00m\n\u001b[0;32m 601\u001b[0m \u001b[39mwith\u001b[39;00m torch\u001b[39m.\u001b[39mno_grad():\n\u001b[1;32m--> 602\u001b[0m param_applied \u001b[39m=\u001b[39m fn(param)\n\u001b[0;32m 603\u001b[0m should_use_set_data \u001b[39m=\u001b[39m compute_should_use_set_data(param, param_applied)\n\u001b[0;32m 604\u001b[0m \u001b[39mif\u001b[39;00m should_use_set_data:\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\module.py:925\u001b[0m, in \u001b[0;36mModule.to..convert\u001b[1;34m(t)\u001b[0m\n\u001b[0;32m 922\u001b[0m \u001b[39mif\u001b[39;00m convert_to_format \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m t\u001b[39m.\u001b[39mdim() \u001b[39min\u001b[39;00m (\u001b[39m4\u001b[39m, \u001b[39m5\u001b[39m):\n\u001b[0;32m 923\u001b[0m \u001b[39mreturn\u001b[39;00m t\u001b[39m.\u001b[39mto(device, dtype \u001b[39mif\u001b[39;00m t\u001b[39m.\u001b[39mis_floating_point() \u001b[39mor\u001b[39;00m t\u001b[39m.\u001b[39mis_complex() \u001b[39melse\u001b[39;00m \u001b[39mNone\u001b[39;00m,\n\u001b[0;32m 924\u001b[0m non_blocking, memory_format\u001b[39m=\u001b[39mconvert_to_format)\n\u001b[1;32m--> 925\u001b[0m \u001b[39mreturn\u001b[39;00m t\u001b[39m.\u001b[39;49mto(device, dtype \u001b[39mif\u001b[39;49;00m t\u001b[39m.\u001b[39;49mis_floating_point() \u001b[39mor\u001b[39;49;00m t\u001b[39m.\u001b[39;49mis_complex() \u001b[39melse\u001b[39;49;00m \u001b[39mNone\u001b[39;49;00m, non_blocking)\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\cuda\\__init__.py:211\u001b[0m, in \u001b[0;36m_lazy_init\u001b[1;34m()\u001b[0m\n\u001b[0;32m 207\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mRuntimeError\u001b[39;00m(\n\u001b[0;32m 208\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mCannot re-initialize CUDA in forked subprocess. To use CUDA with \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 209\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mmultiprocessing, you must use the \u001b[39m\u001b[39m'\u001b[39m\u001b[39mspawn\u001b[39m\u001b[39m'\u001b[39m\u001b[39m start method\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m 210\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mhasattr\u001b[39m(torch\u001b[39m.\u001b[39m_C, \u001b[39m'\u001b[39m\u001b[39m_cuda_getDeviceCount\u001b[39m\u001b[39m'\u001b[39m):\n\u001b[1;32m--> 211\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mAssertionError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mTorch not compiled with CUDA enabled\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m 212\u001b[0m \u001b[39mif\u001b[39;00m _cudart \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 213\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mAssertionError\u001b[39;00m(\n\u001b[0;32m 214\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mlibcudart functions unavailable. It looks like you have a broken build?\u001b[39m\u001b[39m\"\u001b[39m)\n", - "\u001b[1;31mAssertionError\u001b[0m: Torch not compiled with CUDA enabled" - ] - } - ], + "execution_count": 7, + "outputs": [], "source": [ "class FNN(nn.Module):\n", " def __init__(self):\n", " super(FNN, self).__init__()\n", " self.len = 256\n", " channel_list = [35, 20, 10, 5]\n", - " self.fc1 = nn.Linear(35, 20)\n", - " self.fc2 = nn.Linear(20, 10)\n", - " self.fc3 = nn.Linear(10, 5)\n", + " self.fc1 = nn.Linear(319, 100)\n", + " self.fc2 = nn.Linear(100, 50)\n", + " self.fc3 = nn.Linear(50, 5)\n", "\n", " def forward(self, x):\n", " x = x.to(torch.float32)\n", @@ -173,30 +135,79 @@ "fnn = FNN()\n", "fnn = fnn.to(device)\n", "optimizer = torch.optim.Adam(fnn.parameters(), lr=LR) # 定义优化器\n", - "loss_func = focal_loss_multi() # 定义损失函数" - ] + "loss_func = nn.CrossEntropyLoss() # 定义损失函数" + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 8, "outputs": [ { - "ename": "RuntimeError", - "evalue": "mat1 and mat2 shapes cannot be multiplied (128x319 and 35x20)", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[14], line 19\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[39m# 清空梯度缓存\u001b[39;00m\n\u001b[0;32m 17\u001b[0m optimizer\u001b[39m.\u001b[39mzero_grad()\n\u001b[1;32m---> 19\u001b[0m outputs \u001b[39m=\u001b[39m fnn(inputs)\n\u001b[0;32m 21\u001b[0m loss \u001b[39m=\u001b[39m loss_func(outputs, labels\u001b[39m.\u001b[39mlong())\n\u001b[0;32m 22\u001b[0m loss\u001b[39m.\u001b[39mbackward()\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *input, **kwargs)\u001b[0m\n\u001b[0;32m 1126\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1127\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1128\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1129\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1130\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39m\u001b[39minput\u001b[39m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m 1131\u001b[0m \u001b[39m# Do not call functions when jit is used\u001b[39;00m\n\u001b[0;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[39m=\u001b[39m [], []\n", - "Cell \u001b[1;32mIn[12], line 12\u001b[0m, in \u001b[0;36mFNN.forward\u001b[1;34m(self, x)\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, x):\n\u001b[0;32m 11\u001b[0m x \u001b[39m=\u001b[39m x\u001b[39m.\u001b[39mto(torch\u001b[39m.\u001b[39mfloat32)\n\u001b[1;32m---> 12\u001b[0m x \u001b[39m=\u001b[39m F\u001b[39m.\u001b[39mrelu(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mfc1(x))\n\u001b[0;32m 13\u001b[0m x \u001b[39m=\u001b[39m F\u001b[39m.\u001b[39mrelu(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfc2(x))\n\u001b[0;32m 14\u001b[0m x \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfc3(x)\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[1;34m(self, *input, **kwargs)\u001b[0m\n\u001b[0;32m 1126\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[0;32m 1127\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[0;32m 1128\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[0;32m 1129\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[1;32m-> 1130\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39m\u001b[39minput\u001b[39m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m 1131\u001b[0m \u001b[39m# Do not call functions when jit is used\u001b[39;00m\n\u001b[0;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[39m=\u001b[39m [], []\n", - "File \u001b[1;32mc:\\Users\\王瑞恒\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\torch\\nn\\modules\\linear.py:114\u001b[0m, in \u001b[0;36mLinear.forward\u001b[1;34m(self, input)\u001b[0m\n\u001b[0;32m 113\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, \u001b[39minput\u001b[39m: Tensor) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m Tensor:\n\u001b[1;32m--> 114\u001b[0m \u001b[39mreturn\u001b[39;00m F\u001b[39m.\u001b[39;49mlinear(\u001b[39minput\u001b[39;49m, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mweight, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mbias)\n", - "\u001b[1;31mRuntimeError\u001b[0m: mat1 and mat2 shapes cannot be multiplied (128x319 and 35x20)" + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch:0,loss: 3151.320207595825\n", + "epoch:1,loss: 2321.903450489044\n", + "epoch:2,loss: 2256.9100246429443\n", + "epoch:3,loss: 1298.6741995811462\n", + "epoch:4,loss: 1091.3950700759888\n", + "epoch:5,loss: 1104.776943206787\n", + "epoch:6,loss: 1231.5100865364075\n", + "epoch:7,loss: 804.4745910167694\n", + "epoch:8,loss: 658.784494638443\n", + "epoch:9,loss: 557.0827589035034\n", + "epoch:10,loss: 738.1325252056122\n", + "epoch:11,loss: 769.6880600452423\n", + "epoch:12,loss: 458.10057759284973\n", + "epoch:13,loss: 497.0901508331299\n", + "epoch:14,loss: 411.6603829860687\n", + "epoch:15,loss: 250.5609985589981\n", + "epoch:16,loss: 387.088232755661\n", + "epoch:17,loss: 308.30130994319916\n", + "epoch:18,loss: 314.35631680488586\n", + "epoch:19,loss: 375.5763142108917\n", + "epoch:20,loss: 569.8007245063782\n", + "epoch:21,loss: 272.95087587833405\n", + "epoch:22,loss: 232.02807366847992\n", + "epoch:23,loss: 272.6717760562897\n", + "epoch:24,loss: 282.62205362319946\n", + "epoch:25,loss: 370.58508718013763\n", + "epoch:26,loss: 238.88684809207916\n", + "epoch:27,loss: 218.5786339044571\n", + "epoch:28,loss: 188.61170387268066\n", + "epoch:29,loss: 221.02100276947021\n", + "epoch:30,loss: 179.70251786708832\n", + "epoch:31,loss: 156.12333726882935\n", + "epoch:32,loss: 122.91987252235413\n", + "epoch:33,loss: 153.1979397535324\n", + "epoch:34,loss: 224.07494640350342\n", + "epoch:35,loss: 139.0951155424118\n", + "epoch:36,loss: 123.49365735054016\n", + "epoch:37,loss: 97.87656390666962\n", + "epoch:38,loss: 78.64693450927734\n", + "epoch:39,loss: 105.379523396492\n", + "epoch:40,loss: 95.40038180351257\n", + "epoch:41,loss: 118.63325464725494\n", + "epoch:42,loss: 101.8169903755188\n", + "epoch:43,loss: 88.45156133174896\n", + "epoch:44,loss: 84.13636815547943\n", + "epoch:45,loss: 117.95539236068726\n", + "epoch:46,loss: 70.38489985466003\n", + "epoch:47,loss: 67.91977047920227\n", + "epoch:48,loss: 66.15549075603485\n", + "epoch:49,loss: 64.69176268577576\n" ] + }, + { + "data": { + "text/plain": "
", + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -250,20 +261,20 @@ "plt.plot(test_loss_list,label='train')\n", "plt.plot(running_loss_list,label='train')\n", "plt.show()" - ] + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 9, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Accuracy of the network on the test images: 59 %\n" + "Accuracy of the network on the test images: 60 %\n" ] } ], @@ -280,16 +291,19 @@ " correct += (predicted == labels).sum().item()\n", "\n", "print('Accuracy of the network on the test images: %d %%' % (100 * correct / total))" - ] + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", "execution_count": null, + "outputs": [], + "source": [], "metadata": { "collapsed": false - }, - "outputs": [], - "source": [] + } } ], "metadata": { @@ -301,14 +315,14 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.7" + "pygments_lexer": "ipython2", + "version": "2.7.6" } }, "nbformat": 4,