{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "zqPnyO9_YJ8t" }, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "vcnGdgw_YJ8u" }, "source": [ "

PyTorch. Основы: синтаксис, torch.cuda и torch.autograd

" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-Iv1eX2mYJ8v" }, "source": [ "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": {}, "colab_type": "code", "id": "RtyozNmmYJ89" }, "outputs": [], "source": [ "import torch\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ny4-Qi2wYJ-6" }, "source": [ "### Задача 1" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "IWxlFq0bYJ-_" }, "source": [ "1). Создайте два вещественных тензора: `a` размером (3, 4) и `b` размером (12,) \n", "2). Создайте тензор `c`, являющийся тензором `b`, но размера (2, 2, 3) \n", "3). Выведите первый столбец матрицы `a` с помощью индексации" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": {}, "colab_type": "code", "id": "3oxZuk3yYJ_A" }, "outputs": [], "source": [ "# Ваш код здесь" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[1.3733e-14, 6.4076e+07, 2.0706e-19, 7.3909e+22],\n", " [2.4176e-12, 1.1625e+33, 8.9605e-01, 1.1632e+33],\n", " [5.6003e-02, 7.0374e+22, 5.7453e-44, 0.0000e+00]]) tensor([1.7753e+28, 3.0358e+29, 2.9386e+29, 1.7284e+28, 7.1538e+22, 1.3094e+22,\n", " 4.7418e+30, 1.7885e+22, 0.0000e+00, 0.0000e+00, 2.1019e-44, 0.0000e+00])\n", "tensor([[[1.7753e+28, 3.0358e+29, 2.9386e+29],\n", " [1.7284e+28, 7.1538e+22, 1.3094e+22]],\n", "\n", " [[4.7418e+30, 1.7885e+22, 0.0000e+00],\n", " [0.0000e+00, 2.1019e-44, 0.0000e+00]]])\n", "tensor([1.3733e-14, 6.4076e+07, 2.0706e-19, 7.3909e+22])\n" ] } ], "source": [ "a = torch.FloatTensor(3, 4)\n", "b = torch.FloatTensor(12,)\n", "print(a, b)\n", "\n", "c = b.view(2, 2, 3)\n", "print(c)\n", "\n", "print(a[0, :])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "D2IP_FrKYKAA" }, "source": [ "### Задача 2" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "tBZFbSYQYKAA" }, "source": [ "1). Создайте два вещественных тензора: `a` размером (5, 2) и `b` размером (1,10) \n", "2). Создайте тензор `c`, являющийся тензором `b`, но размера (5, 2) \n", "3). Произведите все арифметические операции с тензорами `a` и `c`" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "hzs2bH3GYKAB" }, "outputs": [], "source": [ "# Ваш код здесь" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "tensor([[2.2639e-01, 7.3848e-43],\n", " [1.4013e-45, 0.0000e+00],\n", " [2.8026e-45, 0.0000e+00],\n", " [4.2039e-45, 0.0000e+00],\n", " [7.1479e+22, 1.7889e+22]])\n", "tensor([[7.2441e+22, 6.8608e+22],\n", " [7.2723e+22, 3.2544e+33],\n", " [3.1781e+30, 4.7416e+30],\n", " [3.6893e+19, 1.4024e+03],\n", " [7.1390e+31, 6.3247e+28]])\n", "tensor([[7.2441e+22, 6.8608e+22],\n", " [7.2723e+22, 3.2544e+33],\n", " [3.1781e+30, 4.7416e+30],\n", " [3.6893e+19, 1.4024e+03],\n", " [7.1390e+31, 6.3247e+28]])\n", "tensor([[ -72440809833820518875136.0000,\n", " -68608197011332325703680.0000],\n", " [ -72722973861274162561024.0000,\n", " -3254410046787002278949971029917696.0000],\n", " [ -3178053511054062829225082093568.0000,\n", " -4741572989597317731051850694656.0000],\n", " [ -36893488147419103232.0000,\n", " -1402.4119],\n", " [ -71390067784276497046752964116480.0000,\n", " -63246866811564887481065144320.0000]])\n", "tensor([[1.6400e+22, 5.0666e-20],\n", " [1.0191e-22, 0.0000e+00],\n", " [8.9068e-15, 0.0000e+00],\n", " [1.5510e-25, 0.0000e+00],\n", " [ inf, inf]])\n" ] } ], "source": [ "a = torch.FloatTensor(5, 2)\n", "b = torch.FloatTensor(1, 10)\n", "print(a)\n", "\n", "c = b.view(5, 2)\n", "print(c)\n", "\n", "print(a + c)\n", "print(a.sub(c))\n", "print(a * c)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "rIaroFO6YKBT" }, "source": [ "### Задача 3" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GfLHVvKvYKBT" }, "source": [ "1). Создайте тензор *целых чисел* `images` размерности (100, 200, 200, 3) (можно интерпретировать это как 100 картинок размера 200х200 с тремя цветовыми каналами, то есть 100 цветных изображений 200х200). Заполните его нулями \n", "\n", "2). Сделайте так, чтобы у $i$-ой по порядку картинки была нарисована белая полоса толщиной два пикселя в строках, которые соответствуют номеру картинки. Например, у 3-ей по порядку картинки белая полоска будет занимать 6 и 7 строки, у 99 -- 198 и 199. Сделать белую строку можно, записав в ячейки тензора число 255 (по всем трём каналам). Выведите пару примеров с помощоью `pylot` \n", "\n", "3). Посчитайте среднее тензора `images` по 1-ой оси (по сути - средняя картинка), умножьте полученный тензор на 70. Нарисуйте с помощью `pyplot`, должна получиться серая картинка (при взятии среднего нужно привести тензор к float с помощью `.float()`, при отрисовке обратно к int с помощью `.int()`)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "colab": {}, "colab_type": "code", "id": "pZVGHEQQYKBU" }, "outputs": [], "source": [ "# Ваш код здесь" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "images = torch.IntTensor(100, 200, 200, 3).zero_()\n", "\n", "for i in range(images.shape[0]):\n", " images[i, 2*i:2*i+2, :, :] = 255\n", "\n", "plt.imshow(images[50].numpy());" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mean_image = images.float().mean(dim=0) * 70\n", "plt.imshow(mean_image.int());" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "1ALNkrzMYKCY" }, "source": [ "### Задача 4" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "7-KS81rUYKCY" }, "source": [ "Напишите функцию `forward_pass(X, w)` ($w_0$ входит в $w$) для одного нейрона (с **сигмоидой**) с помощью PyTorch:" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "colab": {}, "colab_type": "code", "id": "vkaIwpn6YKCY" }, "outputs": [], "source": [ "def forward_pass(X, w):\n", " # Ваш код здесь" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "def forward_pass(X, w):\n", " return torch.sigmoid(X @ w)" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "colab": {}, "colab_type": "code", "id": "VyqlDItxYKCZ", "outputId": "87ae60cb-715b-456e-b92e-992ea55db795" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "result: tensor([[1.0000],\n", " [0.9985],\n", " [0.0474]])\n" ] } ], "source": [ "X = torch.FloatTensor([[-5, 5], [2, 3], [1, -1]])\n", "w = torch.FloatTensor([[-0.5], [2.5]])\n", "result = forward_pass(X, w)\n", "print('result: {}'.format(result))" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "uT9rDk5RYKCa" }, "source": [ "Должно получиться: \n", "\n", "|variable|value|\n", "|-|-|\n", "|**X**|torch.FloatTensor([[-5, 5], [15, 20], [100, -700]])|\n", "|**w**|torch.FloatTensor([[-0.5], [150]])|\n", "|**result**|torch.FloatTensor([[1.0000], [0.9985], [0.0474]])| " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "oQnhq5ZdYKCu" }, "source": [ "### Задача 5" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "UB95BhgTYKCu" }, "source": [ "- Перейдите на [Google Colaboratory](https://colab.research.google.com), чтобы работать с GPU. Загрузите туда этот ноутбук (`Upload notebook`)\n", "- В Colab нажмите в меню сверху: `Runtime` -> `Change Runtime Type` -> `GPU`, где изначально стоит `None`\n", "- Объявите тензор `a` размера (2, 3, 4) и тензор `b` размера (1, 8, 3) на GPU, иницилизируйте их случайно равномерно (`.uniform_()`)\n", "- Затем измените форму тензора `b`, чтобы она совпадала с формой тензора `a`, получите тензор `c` \n", "- Переместите `c` на CPU, переместите `a` на CPU \n", "- Оберните их в `Variable()`\n", "- Объявите тензор `L = torch.mean((c - a) `**` 2)` и посчитайте градиент `L` по `c` ( то есть $\\frac{\\partial{L}}{\\partial{c}})$\n", "- Выведите градиент `L` по `c`" ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "colab": {}, "colab_type": "code", "id": "WESOm5TCYKCv" }, "outputs": [], "source": [ "# Ваш код здесь" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = torch.FloatTensor(2, 3, 4).uniform_().cuda()\n", "b = torch.FloatTensor(1, 8, 3).uniform_().cuda()\n", "\n", "print(a)\n", "print(b)\n", "\n", "c = b.view(2, 3, 4)\n", "print(c)\n", "\n", "a = torch.autograd.Variable(a.cpu(), requires_grad=False)\n", "c = torch.autograd.Variable(c.cpu(), requires_grad=True)\n", "print(a)\n", "print(c)\n", "\n", "L = torch.mean((c - a) ** 2)\n", "L.backward()\n", "\n", "print(c.grad)" ] } ], "metadata": { "colab": { "name": "[seminar]pytorch_basics.ipynb", "provenance": [], "version": "0.3.2" }, "kernelspec": { "display_name": "Python 3", "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.6.5" } }, "nbformat": 4, "nbformat_minor": 1 }