diff --git a/My_Experiments/PyTorch_Course/00_pytorch_fundamentals.ipynb b/My_Experiments/PyTorch_Course/00_pytorch_fundamentals.ipynb index 81f77f7..d177936 100644 --- a/My_Experiments/PyTorch_Course/00_pytorch_fundamentals.ipynb +++ b/My_Experiments/PyTorch_Course/00_pytorch_fundamentals.ipynb @@ -1558,16 +1558,373 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "e7bb6813", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(array([1., 2., 3., 4., 5., 6., 7.]),\n", + " tensor([1., 2., 3., 4., 5., 6., 7.], dtype=torch.float64))" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import torch\n", "import numpy as np\n", "array = np.arange(1.0, 8.0)\n", - "tensor = torch.tensor" + "tensor = torch.from_numpy(array)\n", + "array, tensor" ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "61b93491", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([2., 3., 4., 5., 6., 7., 8.]),\n", + " tensor([1., 2., 3., 4., 5., 6., 7.], dtype=torch.float64))" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "array = array + 1\n", + "array, tensor" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "41d9fd3a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor([1., 1., 1., 1., 1., 1., 1.]),\n", + " array([1., 1., 1., 1., 1., 1., 1.], dtype=float32))" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tensor = torch.ones(7)\n", + "numpy_tensor = tensor.numpy()\n", + "tensor, numpy_tensor" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "8ada9db6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor([2., 2., 2., 2., 2., 2., 2.]),\n", + " array([1., 1., 1., 1., 1., 1., 1.], dtype=float32))" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Change the tensor, keep the array the same\n", + "tensor = tensor + 1\n", + "tensor, numpy_tensor" + ] + }, + { + "cell_type": "markdown", + "id": "3af058da", + "metadata": {}, + "source": [ + "## Reproducibility (trying to take the random out of random)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "0a00667b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A: tensor([[4.2700e-01, 8.9671e-01, 4.1658e-01, 2.9154e-01],\n", + " [3.4190e-02, 3.4361e-01, 3.1516e-01, 2.7454e-04],\n", + " [9.2615e-01, 1.6299e-02, 1.7206e-01, 1.8269e-01]])\n", + "B: tensor([[0.9275, 0.7377, 0.7251, 0.2588],\n", + " [0.4665, 0.1228, 0.1004, 0.6401],\n", + " [0.3025, 0.1982, 0.0094, 0.3338]])\n" + ] + }, + { + "data": { + "text/plain": [ + "tensor([[False, False, False, False],\n", + " [False, False, False, False],\n", + " [False, False, False, False]])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "random_tensor_A = torch.rand(3, 4)\n", + "random_tensor_B = torch.rand(3, 4)\n", + "\n", + "print(\"A:\", random_tensor_A)\n", + "print(\"B:\", random_tensor_B)\n", + "random_tensor_A == random_tensor_B" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "ab5c361b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[True, True, True, True],\n", + " [True, True, True, True],\n", + " [True, True, True, True]])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import torch\n", + "import random\n", + "RANDOM_SEED=42\n", + "torch.manual_seed(seed=RANDOM_SEED)\n", + "random_tensor_C = torch.rand(3, 4)\n", + "\n", + "torch.random.manual_seed(seed=RANDOM_SEED)\n", + "random_tensor_D = torch.rand(3, 4)\n", + "\n", + "random_tensor_C == random_tensor_D\n" + ] + }, + { + "cell_type": "markdown", + "id": "c265868a", + "metadata": {}, + "source": [ + "## Running tensors on GPUs (and making faster computations)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "30165071", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sat Jul 4 03:48:48 2026 \n", + "+-----------------------------------------------------------------------------------------+\n", + "| NVIDIA-SMI 580.159.03 Driver Version: 580.159.03 CUDA Version: 13.0 |\n", + "+-----------------------------------------+------------------------+----------------------+\n", + "| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n", + "| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n", + "| | | MIG M. |\n", + "|=========================================+========================+======================|\n", + "| 0 NVIDIA GeForce RTX 3050 ... Off | 00000000:01:00.0 Off | N/A |\n", + "| N/A 38C P0 8W / 74W | 15MiB / 4096MiB | 0% Default |\n", + "| | | N/A |\n", + "+-----------------------------------------+------------------------+----------------------+\n", + "\n", + "+-----------------------------------------------------------------------------------------+\n", + "| Processes: |\n", + "| GPU GI CI PID Type Process name GPU Memory |\n", + "| ID ID Usage |\n", + "|=========================================================================================|\n", + "| 0 N/A N/A 1997 G /usr/lib/xorg/Xorg 4MiB |\n", + "+-----------------------------------------------------------------------------------------+\n" + ] + } + ], + "source": [ + "!nvidia-smi" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "0ef09aeb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import torch\n", + "torch.cuda.is_available()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "cfae87dd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'cuda'" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "device" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "50a4a450", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.cuda.device_count()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "212ef7c7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([1, 2, 3]) cpu\n" + ] + }, + { + "data": { + "text/plain": [ + "tensor([1, 2, 3], device='cuda:0')" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tensor = torch.tensor([1, 2, 3])\n", + "print(tensor, tensor.device)\n", + "\n", + "tensor_on_gpu = tensor.to(device)\n", + "tensor_on_gpu" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "7e7b30a8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3])" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tensor_back_on_cpu = tensor_on_gpu.cpu().numpy()\n", + "tensor_back_on_cpu" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "4a8a7c7f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([1, 2, 3], device='cuda:0')" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tensor_on_gpu" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21192ab6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {