{ "cells": [ { "cell_type": "code", "execution_count": 35, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.107372Z", "start_time": "2021-03-22T05:32:53.400242Z" }, "tags": [ "remove_output" ] }, "outputs": [], "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from tqdm.autonotebook import tqdm\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.114216Z", "start_time": "2021-03-22T05:32:54.109474Z" }, "tags": [ "remove_cell" ] }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib_inline\n", "matplotlib_inline.backend_inline.set_matplotlib_formats('svg')" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.669963Z", "start_time": "2021-03-22T05:32:54.116147Z" } }, "outputs": [], "source": [ "import torch" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.676062Z", "start_time": "2021-03-22T05:32:54.671481Z" } }, "outputs": [], "source": [ "torch_scalar = torch.tensor(3.14)\n", "torch_vector = torch.tensor([1, 2, 3, 4])\n", "torch_matrix = torch.tensor([[1, 2,],\n", " [3, 4,],\n", " [5, 6,], \n", " [7, 8,]])\n", "#You don't have to format it like I did, thats just for clarity\n", "torch_tensor3d = torch.tensor([\n", " [\n", " [ 1, 2, 3], \n", " [ 4, 5, 6],\n", " ],\n", " [\n", " [ 7, 8, 9], \n", " [10, 11, 12],\n", " ],\n", " [\n", " [13, 14, 15], \n", " [16, 17, 18],\n", " ],\n", " [\n", " [19, 20, 21], \n", " [22, 23, 24],\n", " ]\n", " ])" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.688664Z", "start_time": "2021-03-22T05:32:54.677220Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([])\n", "torch.Size([4])\n", "torch.Size([4, 2])\n", "torch.Size([4, 2, 3])\n" ] } ], "source": [ "print(torch_scalar.shape)\n", "print(torch_vector.shape)\n", "print(torch_matrix.shape)\n", "print(torch_tensor3d.shape)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.694456Z", "start_time": "2021-03-22T05:32:54.690164Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.13200003 0.0054197 0.24716025 0.08458665]\n", " [0.51738806 0.517676 0.33316974 0.07034239]\n", " [0.53272871 0.51833686 0.73074206 0.82302625]\n", " [0.37334327 0.59914251 0.82853404 0.51186258]]\n" ] } ], "source": [ "x_np = np.random.random((4,4))\n", "print(x_np)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.701736Z", "start_time": "2021-03-22T05:32:54.697048Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[0.1320, 0.0054, 0.2472, 0.0846],\n", " [0.5174, 0.5177, 0.3332, 0.0703],\n", " [0.5327, 0.5183, 0.7307, 0.8230],\n", " [0.3733, 0.5991, 0.8285, 0.5119]], dtype=torch.float64)\n" ] } ], "source": [ "x_pt = torch.tensor(x_np)\n", "print(x_pt)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.708524Z", "start_time": "2021-03-22T05:32:54.703648Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "float64 torch.float64\n" ] } ], "source": [ "print(x_np.dtype, x_pt.dtype)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.715713Z", "start_time": "2021-03-22T05:32:54.710165Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "float32 torch.float32\n" ] } ], "source": [ "#Lets force them to be 32-bit floats\n", "x_np = np.asarray(x_np, dtype=np.float32)\n", "x_pt = torch.tensor(x_np, dtype=torch.float32)\n", "print(x_np.dtype, x_pt.dtype)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.722368Z", "start_time": "2021-03-22T05:32:54.717373Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[False False False False]\n", " [ True True False False]\n", " [ True True True True]\n", " [False True True True]]\n", "bool\n" ] } ], "source": [ "b_np = (x_np > 0.5)\n", "print(b_np)\n", "print(b_np.dtype)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.729593Z", "start_time": "2021-03-22T05:32:54.724132Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[False, False, False, False],\n", " [ True, True, False, False],\n", " [ True, True, True, True],\n", " [False, True, True, True]])\n", "torch.bool\n" ] } ], "source": [ "b_pt = (x_pt > 0.5)\n", "print(b_pt)\n", "print(b_pt.dtype)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.737835Z", "start_time": "2021-03-22T05:32:54.730952Z" } }, "outputs": [ { "data": { "text/plain": [ "np.float32(6.8254595)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(x_np)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.743037Z", "start_time": "2021-03-22T05:32:54.739198Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor(6.8255)" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.sum(x_pt)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.747879Z", "start_time": "2021-03-22T05:32:54.744383Z" } }, "outputs": [ { "data": { "text/plain": [ "array([[0.13200003, 0.51738805, 0.53272873, 0.37334326],\n", " [0.0054197 , 0.517676 , 0.5183369 , 0.5991425 ],\n", " [0.24716026, 0.33316973, 0.73074204, 0.82853407],\n", " [0.08458665, 0.07034239, 0.82302624, 0.5118626 ]], dtype=float32)" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.transpose(x_np)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.755058Z", "start_time": "2021-03-22T05:32:54.749723Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor([[0.1320, 0.5174, 0.5327, 0.3733],\n", " [0.0054, 0.5177, 0.5183, 0.5991],\n", " [0.2472, 0.3332, 0.7307, 0.8285],\n", " [0.0846, 0.0703, 0.8230, 0.5119]])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.transpose(x_pt, 0, 1)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:54.763796Z", "start_time": "2021-03-22T05:32:54.756945Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([3, 2, 4])\n" ] } ], "source": [ "print(torch.transpose(torch_tensor3d, 0, 2).shape)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:59.532902Z", "start_time": "2021-03-22T05:32:54.765163Z" } }, "outputs": [], "source": [ "import timeit\n", "x = torch.rand(2**11, 2**11)\n", "time_cpu = timeit.timeit(\"x@x\", globals=globals(), number=100)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:32:59.578188Z", "start_time": "2021-03-22T05:32:59.539627Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Is CUDA available? : True\n" ] } ], "source": [ "print(\"Is CUDA available? :\", torch.cuda.is_available())\n", "device = torch.device(\"cuda\")" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:01.740576Z", "start_time": "2021-03-22T05:32:59.580308Z" } }, "outputs": [], "source": [ "x = x.to(device)\n", "time_gpu = timeit.timeit(\"x@x\", globals=globals(), number=100)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:01.957208Z", "start_time": "2021-03-22T05:33:01.750393Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[tensor(1), tensor(2)]\n", "[tensor(1, device='cuda:0'), tensor(2, device='cuda:0')]\n" ] } ], "source": [ "def moveTo(obj, device):\n", " \"\"\"\n", " obj: the python object to move to a device, or to move its contents to a device\n", " device: the compute device to move objects to\n", " \"\"\"\n", " if isinstance(obj, list):\n", " return [moveTo(x, device) for x in obj]\n", " elif isinstance(obj, tuple):\n", " return tuple(moveTo(list(obj), device))\n", " elif isinstance(obj, set):\n", " return set(moveTo(list(obj), device))\n", " elif isinstance(obj, dict):\n", " to_ret = dict()\n", " for key, value in obj.items():\n", " to_ret[moveTo(key, device)] = moveTo(value, device)\n", " return to_ret\n", " elif hasattr(obj, \"to\"):\n", " return obj.to(device)\n", " else:\n", " return obj\n", " \n", "some_tensors = [torch.tensor(1), torch.tensor(2)]\n", "print(some_tensors)\n", "print(moveTo(some_tensors, device))" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.498610Z", "start_time": "2021-03-22T05:33:01.960934Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-01-13T20:15:58.092532\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.7, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return torch.pow((x-2.0), 2)\n", "\n", "x_axis_vals = np.linspace(-7,9,100) \n", "y_axis_vals = f(torch.tensor(x_axis_vals)).numpy()\n", "\n", "sns.lineplot(x=x_axis_vals, y=y_axis_vals, label='$f(x)=(x-2)^2$')" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.866511Z", "start_time": "2021-03-22T05:33:02.501436Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2026-01-13T20:15:58.198134\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.10.7, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def fP(x): #Defining the derivative of f(x) manually\n", " return 2*x-4\n", "\n", "y_axis_vals_p = fP(torch.tensor(x_axis_vals)).numpy()\n", "\n", "#First, lets draw a black line at 0, so that we can easily tell if something is positive or negative\n", "sns.lineplot(x=x_axis_vals, y=[0.0]*len(x_axis_vals), label=\"0\", color='black')\n", "sns.lineplot(x=x_axis_vals, y=y_axis_vals, label='$f(x) = (x-2)^2$')\n", "sns.lineplot(x=x_axis_vals, y=y_axis_vals_p, label=\"$f'(x)=2 x - 4$\")" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.872628Z", "start_time": "2021-03-22T05:33:02.868281Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "None\n" ] } ], "source": [ "x = torch.tensor([-3.5], requires_grad=True)\n", "print(x.grad)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.879284Z", "start_time": "2021-03-22T05:33:02.874597Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([30.2500], grad_fn=)\n" ] } ], "source": [ "value = f(x)\n", "print(value)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.887619Z", "start_time": "2021-03-22T05:33:02.881506Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([-11.])\n" ] } ], "source": [ "value.backward()\n", "print(x.grad)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.906233Z", "start_time": "2021-03-22T05:33:02.888975Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([2.0000])\n" ] } ], "source": [ "x = torch.tensor([-3.5], requires_grad=True)\n", "\n", "x_cur = x.clone()\n", "x_prev = x_cur*100 #Make the initial \"previous\" solution larger\n", "epsilon = 1e-5\n", "eta = 0.1\n", "\n", "while torch.linalg.norm(x_cur-x_prev) > epsilon:\n", " x_prev = x_cur.clone() #We need to make a clone here so that x_prev and x_cur don't point to the same object\n", " \n", " #Compute our function, gradient, and update\n", " value = f(x)\n", " value.backward()\n", " x.data -= eta * x.grad\n", " x.grad.zero_() #We need to zero out the old gradient, as py-torch will not do that for us\n", " \n", " #What are we currently now?\n", " x_cur = x.data\n", " \n", "print(x_cur)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.911171Z", "start_time": "2021-03-22T05:33:02.908110Z" } }, "outputs": [], "source": [ "x_param = torch.nn.Parameter(torch.tensor([-3.5]), requires_grad=True)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.916541Z", "start_time": "2021-03-22T05:33:02.913522Z" } }, "outputs": [], "source": [ "optimizer = torch.optim.SGD([x_param], lr=eta)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:02.933325Z", "start_time": "2021-03-22T05:33:02.918744Z" }, "tags": [ "remove_output" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([2.0000])\n" ] } ], "source": [ "for epoch in range(60):\n", " optimizer.zero_grad() #x.grad.zero_()\n", " loss_incurred = f(x_param)\n", " loss_incurred.backward()\n", " optimizer.step() #x.data -= eta * x.grad\n", "print(x_param.data)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:18.679235Z", "start_time": "2021-03-22T05:33:02.939654Z" } }, "outputs": [ { "ename": "AttributeError", "evalue": "module 'numpy' has no attribute '_no_nep50_warning'", "output_type": "error", "traceback": [ "\u001b[31m---------------------------------------------------------------------------\u001b[39m", "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[64]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtorch\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mdata\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Dataset\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01msklearn\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mdatasets\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m fetch_openml\n\u001b[32m 4\u001b[39m \u001b[38;5;66;03m# Load data from https://www.openml.org/d/554\u001b[39;00m\n\u001b[32m 5\u001b[39m X, y = fetch_openml(\u001b[33m'\u001b[39m\u001b[33mmnist_784\u001b[39m\u001b[33m'\u001b[39m, version=\u001b[32m1\u001b[39m, return_X_y=\u001b[38;5;28;01mTrue\u001b[39;00m)\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\sklearn\\__init__.py:73\u001b[39m\n\u001b[32m 62\u001b[39m \u001b[38;5;66;03m# `_distributor_init` allows distributors to run custom init code.\u001b[39;00m\n\u001b[32m 63\u001b[39m \u001b[38;5;66;03m# For instance, for the Windows wheel, this is used to pre-load the\u001b[39;00m\n\u001b[32m 64\u001b[39m \u001b[38;5;66;03m# vcomp shared library runtime for OpenMP embedded in the sklearn/.libs\u001b[39;00m\n\u001b[32m (...)\u001b[39m\u001b[32m 67\u001b[39m \u001b[38;5;66;03m# later is linked to the OpenMP runtime to make it possible to introspect\u001b[39;00m\n\u001b[32m 68\u001b[39m \u001b[38;5;66;03m# it and importing it first would fail if the OpenMP dll cannot be found.\u001b[39;00m\n\u001b[32m 69\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m ( \u001b[38;5;66;03m# noqa: F401 E402\u001b[39;00m\n\u001b[32m 70\u001b[39m __check_build,\n\u001b[32m 71\u001b[39m _distributor_init,\n\u001b[32m 72\u001b[39m )\n\u001b[32m---> \u001b[39m\u001b[32m73\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01mbase\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m clone \u001b[38;5;66;03m# noqa: E402\u001b[39;00m\n\u001b[32m 74\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_show_versions\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m show_versions \u001b[38;5;66;03m# noqa: E402\u001b[39;00m\n\u001b[32m 76\u001b[39m _submodules = [\n\u001b[32m 77\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mcalibration\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 78\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mcluster\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 114\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mcompose\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 115\u001b[39m ]\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\sklearn\\base.py:19\u001b[39m\n\u001b[32m 17\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_config\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m config_context, get_config\n\u001b[32m 18\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01mexceptions\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m InconsistentVersionWarning\n\u001b[32m---> \u001b[39m\u001b[32m19\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_metadata_requests\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m _MetadataRequester, _routing_enabled\n\u001b[32m 20\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_missing\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m is_scalar_nan\n\u001b[32m 21\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_param_validation\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m validate_parameter_constraints\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\sklearn\\utils\\__init__.py:9\u001b[39m\n\u001b[32m 7\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m metadata_routing\n\u001b[32m 8\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_bunch\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Bunch\n\u001b[32m----> \u001b[39m\u001b[32m9\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_chunking\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m gen_batches, gen_even_slices\n\u001b[32m 11\u001b[39m \u001b[38;5;66;03m# Make _safe_indexing importable from here for backward compat as this particular\u001b[39;00m\n\u001b[32m 12\u001b[39m \u001b[38;5;66;03m# helper is considered semi-private and typically very useful for third-party\u001b[39;00m\n\u001b[32m 13\u001b[39m \u001b[38;5;66;03m# libraries that want to comply with scikit-learn's estimator API. In particular,\u001b[39;00m\n\u001b[32m 14\u001b[39m \u001b[38;5;66;03m# _safe_indexing was included in our public API documentation despite the leading\u001b[39;00m\n\u001b[32m 15\u001b[39m \u001b[38;5;66;03m# `_` in its name.\u001b[39;00m\n\u001b[32m 16\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_indexing\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[32m 17\u001b[39m _safe_indexing, \u001b[38;5;66;03m# noqa: F401\u001b[39;00m\n\u001b[32m 18\u001b[39m resample,\n\u001b[32m 19\u001b[39m shuffle,\n\u001b[32m 20\u001b[39m )\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\sklearn\\utils\\_chunking.py:11\u001b[39m\n\u001b[32m 8\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnp\u001b[39;00m\n\u001b[32m 10\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_config\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m get_config\n\u001b[32m---> \u001b[39m\u001b[32m11\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_param_validation\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Interval, validate_params\n\u001b[32m 14\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mchunk_generator\u001b[39m(gen, chunksize):\n\u001b[32m 15\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"Chunk generator, ``gen`` into lists of length ``chunksize``. The last\u001b[39;00m\n\u001b[32m 16\u001b[39m \u001b[33;03m chunk may have a length less than ``chunksize``.\"\"\"\u001b[39;00m\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\sklearn\\utils\\_param_validation.py:14\u001b[39m\n\u001b[32m 11\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumbers\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Integral, Real\n\u001b[32m 13\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnp\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m14\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01msparse\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m csr_matrix, issparse\n\u001b[32m 16\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_config\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m config_context, get_config\n\u001b[32m 17\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01mvalidation\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m _is_arraylike_not_scalar\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\scipy\\sparse\\__init__.py:304\u001b[39m\n\u001b[32m 301\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mwarnings\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m_warnings\u001b[39;00m\n\u001b[32m 302\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mimportlib\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m_importlib\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m304\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_base\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m *\n\u001b[32m 305\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_csr\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m *\n\u001b[32m 306\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_csc\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m *\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\scipy\\sparse\\_base.py:8\u001b[39m\n\u001b[32m 5\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnp\u001b[39;00m\n\u001b[32m 6\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01moperator\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m8\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_sputils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (asmatrix, check_reshape_kwargs, check_shape,\n\u001b[32m 9\u001b[39m get_sum_dtype, isdense, isscalarlike, _todata,\n\u001b[32m 10\u001b[39m matrix, validateaxis, getdtype, is_pydata_spmatrix)\n\u001b[32m 11\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_sparse\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m SparseABC, issparse\n\u001b[32m 13\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_matrix\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m spmatrix\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\scipy\\sparse\\_sputils.py:10\u001b[39m\n\u001b[32m 8\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmath\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m prod\n\u001b[32m 9\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01msparse\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01msp\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m10\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_util\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m np_long, np_ulong\n\u001b[32m 13\u001b[39m __all__ = [\u001b[33m'\u001b[39m\u001b[33mupcast\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mgetdtype\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mgetdata\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33misscalarlike\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33misintlike\u001b[39m\u001b[33m'\u001b[39m,\n\u001b[32m 14\u001b[39m \u001b[33m'\u001b[39m\u001b[33misshape\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33missequence\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33misdense\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mismatrix\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mget_sum_dtype\u001b[39m\u001b[33m'\u001b[39m,\n\u001b[32m 15\u001b[39m \u001b[33m'\u001b[39m\u001b[33mbroadcast_shapes\u001b[39m\u001b[33m'\u001b[39m]\n\u001b[32m 17\u001b[39m supported_dtypes = [np.bool_, np.byte, np.ubyte, np.short, np.ushort, np.intc,\n\u001b[32m 18\u001b[39m np.uintc, np_long, np_ulong, np.longlong, np.ulonglong,\n\u001b[32m 19\u001b[39m np.float32, np.float64, np.longdouble,\n\u001b[32m 20\u001b[39m np.complex64, np.complex128, np.clongdouble]\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\scipy\\_lib\\_util.py:14\u001b[39m\n\u001b[32m 11\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtyping\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Literal, TypeAlias, TypeVar\n\u001b[32m 13\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnp\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m14\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_array_api\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (Array, array_namespace, is_lazy_array,\n\u001b[32m 15\u001b[39m is_numpy, is_marray, xp_result_device,\n\u001b[32m 16\u001b[39m xp_size, xp_result_type)\n\u001b[32m 17\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_docscrape\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m FunctionDoc, Parameter\n\u001b[32m 18\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_sparse\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m issparse\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\scipy\\_lib\\_array_api.py:25\u001b[39m\n\u001b[32m 22\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mtyping\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnpt\u001b[39;00m\n\u001b[32m 24\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m array_api_compat\n\u001b[32m---> \u001b[39m\u001b[32m25\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01marray_api_compat\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[32m 26\u001b[39m is_array_api_obj,\n\u001b[32m 27\u001b[39m is_lazy_array,\n\u001b[32m 28\u001b[39m size \u001b[38;5;28;01mas\u001b[39;00m xp_size,\n\u001b[32m 29\u001b[39m numpy \u001b[38;5;28;01mas\u001b[39;00m np_compat,\n\u001b[32m 30\u001b[39m device \u001b[38;5;28;01mas\u001b[39;00m xp_device,\n\u001b[32m 31\u001b[39m is_numpy_namespace \u001b[38;5;28;01mas\u001b[39;00m is_numpy,\n\u001b[32m 32\u001b[39m is_cupy_namespace \u001b[38;5;28;01mas\u001b[39;00m is_cupy,\n\u001b[32m 33\u001b[39m is_torch_namespace \u001b[38;5;28;01mas\u001b[39;00m is_torch,\n\u001b[32m 34\u001b[39m is_jax_namespace \u001b[38;5;28;01mas\u001b[39;00m is_jax,\n\u001b[32m 35\u001b[39m is_dask_namespace \u001b[38;5;28;01mas\u001b[39;00m is_dask,\n\u001b[32m 36\u001b[39m is_array_api_strict_namespace \u001b[38;5;28;01mas\u001b[39;00m is_array_api_strict\n\u001b[32m 37\u001b[39m )\n\u001b[32m 38\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_sparse\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m issparse\n\u001b[32m 39\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mscipy\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_lib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_docscrape\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m FunctionDoc\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\scipy\\_lib\\array_api_compat\\numpy\\__init__.py:4\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# ruff: noqa: PLC0414\u001b[39;00m\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtyping\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Final\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m * \u001b[38;5;66;03m# noqa: F403 # pyright: ignore[reportWildcardImportFromLibrary]\u001b[39;00m\n\u001b[32m 6\u001b[39m \u001b[38;5;66;03m# from numpy import * doesn't overwrite these builtin names\u001b[39;00m\n\u001b[32m 7\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;28mabs\u001b[39m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;28mabs\u001b[39m\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\numpy\\testing\\__init__.py:11\u001b[39m\n\u001b[32m 8\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01munittest\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m TestCase\n\u001b[32m 10\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m _private\n\u001b[32m---> \u001b[39m\u001b[32m11\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_private\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m *\n\u001b[32m 12\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_private\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mutils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m (_assert_valid_refcount, _gen_alignment_data)\n\u001b[32m 13\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01m.\u001b[39;00m\u001b[34;01m_private\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m extbuild\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\numpy\\testing\\_private\\utils.py:465\u001b[39m\n\u001b[32m 461\u001b[39m pprint.pprint(desired, msg)\n\u001b[32m 462\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAssertionError\u001b[39;00m(msg.getvalue())\n\u001b[32m--> \u001b[39m\u001b[32m465\u001b[39m \u001b[38;5;129m@np\u001b[39m\u001b[43m.\u001b[49m\u001b[43m_no_nep50_warning\u001b[49m()\n\u001b[32m 466\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34massert_almost_equal\u001b[39m(actual, desired, decimal=\u001b[32m7\u001b[39m, err_msg=\u001b[33m'\u001b[39m\u001b[33m'\u001b[39m, verbose=\u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[32m 467\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 468\u001b[39m \u001b[33;03m Raises an AssertionError if two items are not equal up to desired\u001b[39;00m\n\u001b[32m 469\u001b[39m \u001b[33;03m precision.\u001b[39;00m\n\u001b[32m (...)\u001b[39m\u001b[32m 533\u001b[39m \n\u001b[32m 534\u001b[39m \u001b[33;03m \"\"\"\u001b[39;00m\n\u001b[32m 535\u001b[39m __tracebackhide__ = \u001b[38;5;28;01mTrue\u001b[39;00m \u001b[38;5;66;03m# Hide traceback for py.test\u001b[39;00m\n", "\u001b[36mFile \u001b[39m\u001b[32md:\\app\\miniconda\\envs\\dpl\\Lib\\site-packages\\numpy\\__init__.py:795\u001b[39m, in \u001b[36m__getattr__\u001b[39m\u001b[34m(attr)\u001b[39m\n\u001b[32m 0\u001b[39m \n", "\u001b[31mAttributeError\u001b[39m: module 'numpy' has no attribute '_no_nep50_warning'" ] } ], "source": [ "from torch.utils.data import Dataset\n", "from sklearn.datasets import fetch_openml\n", "\n", "# Load data from https://www.openml.org/d/554\n", "X, y = fetch_openml('mnist_784', version=1, return_X_y=True)\n", "print(X.shape)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:18.684096Z", "start_time": "2021-03-22T05:33:18.680539Z" } }, "outputs": [], "source": [ "class SimpleDataset(Dataset):\n", " \n", " def __init__(self, X, y):\n", " super(SimpleDataset, self).__init__()\n", " self.X = X\n", " self.y = y\n", " \n", " def __getitem__(self, index):\n", " #This \"work\" could have gone in the constructor, but you should get into \n", " inputs = torch.tensor(self.X[index,:], dtype=torch.float32)\n", " targets = torch.tensor(int(self.y[index]), dtype=torch.int64)\n", " return inputs, targets \n", "\n", " def __len__(self):\n", " return self.X.shape[0]\n", "#Now we can make a PyTorch dataset \n", "dataset = SimpleDataset(X, y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:18.698359Z", "start_time": "2021-03-22T05:33:18.685197Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Length: 70000\n", "Features: torch.Size([784])\n", "Label of index 0: tensor(5)\n" ] } ], "source": [ "print(\"Length: \", len(dataset))\n", "example, label = dataset[0]\n", "print(\"Features: \", example.shape) #Will return 784\n", "print(\"Label of index 0: \", label)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:18.934961Z", "start_time": "2021-03-22T05:33:18.700260Z" }, "max_h": 0.3, "max_w": 0.9 }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/pdf": "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MCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAy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nb84HWGEHGGEHGGEHGGEHGGEHGEkjy96onNuk/vgPTPl3vzqF3J/quSTrD1TSMt5fUdz8F1xp1Pa8a188bTEeLvQSYXTEUbIEUbIEUbIEUbIEUbIEUbIEUa87h2jM28Nj7EdN8oXP13RKfeVxX3ZfKarrT27XO6Ht1fLvWzvMbmX/j5RrhIzwukII+QII+QII+QII+QII+QII+QII7m9dxx+SH9Tc/jZmNw3Ve4Pj403DGXzmUL64pfDY92+Fvniqhd/knvpgL5HTIz6sSYkTkcYIUcYIUcYIUcYIUcYIUcYIUcYye29Y+8jOveTi/f89zdvG5gr99bORrkH8UDuVZt7wuO8vm754nh6z4bR4XSEEXKEEXKEEXKEEXKEEXKEEXKEkaAhaBrrZwD+wekII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII+QII38DI0znuAplbmRzdHJlYW0KZW5kb2JqCjIxIDAgb2JqCjE2MDEKZW5kb2JqCjIgMCBvYmoKPDwgL0NvdW50IDEgL0tpZHMgWyAxMCAwIFIgXSAvVHlwZSAvUGFnZXMgPj4KZW5kb2JqCjIyIDAgb2JqCjw8IC9DcmVhdGlvbkRhdGUgKEQ6MjAyMTAzMjIwMTMzMTgtMDQnMDAnKQovQ3JlYXRvciAoTWF0cGxvdGxpYiB2My4zLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My4zLjIpID4+CmVuZG9iagp4cmVmCjAgMjMKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMDU4MTIgMDAwMDAgbiAKMDAwMDAwMzc1NiAwMDAwMCBuIAowMDAwMDAzNzg4IDAwMDAwIG4gCjAwMDAwMDM4ODcgMDAwMDAgbiAKMDAwMDAwMzkwOCAwMDAwMCBuIAowMDAwMDAzOTI5IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM5OCAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDEwMTQgMDAwMDAgbiAKMDAwMDAwMzk2MSAwMDAwMCBuIAowMDAwMDAyNjMxIDAwMDAwIG4gCjAwMDAwMDI0MzEgMDAwMDAgbiAKMDAwMDAwMjExMCAwMDAwMCBuIAowMDAwMDAzNjg0IDAwMDAwIG4gCjAwMDAwMDEwMzQgMDAwMDAgbiAKMDAwMDAwMTM1NCAwMDAwMCBuIAowMDAwMDAxNTA2IDAwMDAwIG4gCjAwMDAwMDE4MjcgMDAwMDAgbiAKMDAwMDAwNTc5MSAwMDAwMCBuIAowMDAwMDA1ODcyIDAwMDAwIG4gCnRyYWlsZXIKPDwgL0luZm8gMjIgMCBSIC9Sb290IDEgMCBSIC9TaXplIDIzID4+CnN0YXJ0eHJlZgo2MDI5CiUlRU9GCg==\n", "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(example.reshape((28,28)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-22T05:33:18.943218Z", "start_time": "2021-03-22T05:33:18.936102Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "56000 examples for training and 14000 for testing\n" ] } ], "source": [ "train_size = int(len(dataset)*0.8)\n", "test_size = len(dataset)-train_size\n", "\n", "train_dataset, test_dataset = torch.utils.data.random_split(dataset, (train_size, test_size))\n", "print(\"{} examples for training and {} for testing\".format(len(train_dataset), len(test_dataset)))" ] } ], "metadata": { "author": "Why PyTorch?", "celltoolbar": "Tags", "kernelspec": { "display_name": "dpl", "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.11.14" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": false, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "latex_metadata": { "title": "The Mechanics of Learning" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }