diff --git a/lab1/PT_Part1_Intro.ipynb b/lab1/PT_Part1_Intro.ipynb
index db97d067..d1457baa 100644
--- a/lab1/PT_Part1_Intro.ipynb
+++ b/lab1/PT_Part1_Intro.ipynb
@@ -1,5 +1,15 @@
{
"cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {
@@ -60,11 +70,56 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "LkaimNJfYZ2w"
- },
- "outputs": [],
+ "execution_count": 3,
+ "metadata": {
+ "id": "LkaimNJfYZ2w",
+ "outputId": "4e635cf3-7bd4-4897-ee34-f131e78a833f",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/2.8 MB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m \u001b[32m2.8/2.8 MB\u001b[0m \u001b[31m87.1 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.8/2.8 MB\u001b[0m \u001b[31m53.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m152.3/152.3 kB\u001b[0m \u001b[31m13.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.7/9.7 MB\u001b[0m \u001b[31m93.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
+ " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
+ " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m666.7/666.7 kB\u001b[0m \u001b[31m36.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m69.7/69.7 kB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.2/45.2 kB\u001b[0m \u001b[31m3.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m82.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m4.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m67.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m36.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m42.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m5.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m21.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m188.7/188.7 MB\u001b[0m \u001b[31m5.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m88.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.1/66.1 kB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25h Building wheel for mitdeeplearning (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
+ " Building wheel for litellm (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "Gym has been unmaintained since 2022 and does not support NumPy 2.0 amongst other critical functionality.\n",
+ "Please upgrade to Gymnasium, the maintained drop-in replacement of Gym, or contact the authors of your software and request that they upgrade.\n",
+ "See the migration guide at https://gymnasium.farama.org/introduction/migration_guide/ for additional information.\n"
+ ]
+ }
+ ],
"source": [
"import torch\n",
"import torch.nn as nn\n",
@@ -94,11 +149,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "tFxztZQInlAB"
- },
- "outputs": [],
+ "execution_count": 2,
+ "metadata": {
+ "id": "tFxztZQInlAB",
+ "outputId": "ae5abcef-1b6a-40b0-da68-74803f50520e",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "`integer` is a 0-d Tensor: 1234\n",
+ "`decimal` is a 0-d Tensor: 3.1415927410125732\n"
+ ]
+ }
+ ],
"source": [
"integer = torch.tensor(1234)\n",
"decimal = torch.tensor(3.14159265359)\n",
@@ -118,11 +186,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "oaHXABe8oPcO"
- },
- "outputs": [],
+ "execution_count": 3,
+ "metadata": {
+ "id": "oaHXABe8oPcO",
+ "outputId": "606661e9-8736-4edd-8b3b-ab8c24816542",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "`fibonacci` is a 1-d Tensor with shape: torch.Size([6])\n",
+ "`count_to_100` is a 1-d Tensor with shape: torch.Size([100])\n"
+ ]
+ }
+ ],
"source": [
"fibonacci = torch.tensor([1, 1, 2, 3, 5, 8])\n",
"count_to_100 = torch.tensor(range(100))\n",
@@ -142,16 +223,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "tFeBBe1IouS3"
- },
- "outputs": [],
+ "execution_count": 12,
+ "metadata": {
+ "id": "tFeBBe1IouS3",
+ "outputId": "98cd1fd1-e7ad-4300-c0c0-bf9b7144b096",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "images is a 4-d Tensor with shape: torch.Size([10, 3, 256, 256])\n"
+ ]
+ }
+ ],
"source": [
"### Defining higher-order Tensors ###\n",
"\n",
"'''TODO: Define a 2-d Tensor'''\n",
- "matrix = # TODO\n",
+ "matrix = torch.tensor([[1,2] , [3,4]])\n",
"\n",
"assert isinstance(matrix, torch.Tensor), \"matrix must be a torch Tensor object\"\n",
"assert matrix.ndim == 2\n",
@@ -159,7 +252,7 @@
"'''TODO: Define a 4-d Tensor.'''\n",
"# Use torch.zeros to initialize a 4-d Tensor of zeros with size 10 x 3 x 256 x 256.\n",
"# You can think of this as 10 images where each image is RGB 256 x 256.\n",
- "images = # TODO\n",
+ "images = torch.zeros(10,3, 256,256)\n",
"\n",
"assert isinstance(images, torch.Tensor), \"images must be a torch Tensor object\"\n",
"assert images.ndim == 4, \"images must have 4 dimensions\"\n",
@@ -178,11 +271,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "FhaufyObuLEG"
- },
- "outputs": [],
+ "execution_count": 13,
+ "metadata": {
+ "id": "FhaufyObuLEG",
+ "outputId": "f56db1ca-4f7a-4999-85a1-e199851a81f3",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "`row_vector`: tensor([3, 4])\n",
+ "`column_vector`: tensor([2, 4])\n",
+ "`scalar`: 2\n"
+ ]
+ }
+ ],
"source": [
"row_vector = matrix[1]\n",
"column_vector = matrix[:, 1]\n",
@@ -208,11 +315,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "X_YJrZsxYZ2z"
- },
- "outputs": [],
+ "execution_count": 14,
+ "metadata": {
+ "id": "X_YJrZsxYZ2z",
+ "outputId": "6009e86e-8c26-4470-d1c6-49c949b564ea",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "c1: 76\n",
+ "c2: 76\n"
+ ]
+ }
+ ],
"source": [
"# Create the nodes in the graph and initialize values\n",
"a = torch.tensor(15)\n",
@@ -244,7 +364,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {
"id": "PJnfzpWyYZ23",
"scrolled": true
@@ -256,9 +376,9 @@
"# Construct a simple computation function\n",
"def func(a, b):\n",
" '''TODO: Define the operation for c, d, e.'''\n",
- " c = # TODO\n",
- " d = # TODO\n",
- " e = # TODO\n",
+ " c = a +b\n",
+ " d = b-1\n",
+ " e = c * d\n",
" return e\n"
]
},
@@ -273,11 +393,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "pnwsf8w2uF7p"
- },
- "outputs": [],
+ "execution_count": 16,
+ "metadata": {
+ "id": "pnwsf8w2uF7p",
+ "outputId": "cb0771e4-e5e2-47c1-d4c8-ca58aa4229e7",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "e_out: 6.0\n"
+ ]
+ }
+ ],
"source": [
"# Consider example values for a,b\n",
"a, b = 1.5, 2.5\n",
@@ -315,7 +447,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {
"id": "HutbJk-1kHPh"
},
@@ -337,10 +469,10 @@
"\n",
" def forward(self, x):\n",
" '''TODO: define the operation for z (hint: use torch.matmul).'''\n",
- " z = # TODO\n",
+ " z = torch.matmul(x, self.W) + self.bias\n",
"\n",
" '''TODO: define the operation for out (hint: use torch.sigmoid).'''\n",
- " y = # TODO\n",
+ " y = torch.sigmoid(z)\n",
" return y\n"
]
},
@@ -355,11 +487,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "2yxjCPa69hV_"
- },
- "outputs": [],
+ "execution_count": 20,
+ "metadata": {
+ "id": "2yxjCPa69hV_",
+ "outputId": "ac5b934e-30e3-46fd-a68c-6b04a39a3fcd",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "input shape: torch.Size([1, 2])\n",
+ "output shape: torch.Size([1, 3])\n",
+ "output result: tensor([[0.2512, 0.9572, 0.4520]], grad_fn=)\n"
+ ]
+ }
+ ],
"source": [
"# Define a layer and test the output!\n",
"num_inputs = 2\n",
@@ -386,7 +532,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {
"id": "7WXTpmoL6TDz"
},
@@ -401,7 +547,10 @@
"# Define the model\n",
"'''TODO: Use the Sequential API to define a neural network with a\n",
" single linear (dense!) layer, followed by non-linearity to compute z'''\n",
- "model = nn.Sequential( ''' TODO ''' )\n"
+ "model = nn.Sequential(\n",
+ " nn.Linear(n_input_nodes, n_output_nodes),\n",
+ " nn.Sigmoid()\n",
+ ")\n"
]
},
{
@@ -415,11 +564,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "zKhp6XqCFFa0"
- },
- "outputs": [],
+ "execution_count": 22,
+ "metadata": {
+ "id": "zKhp6XqCFFa0",
+ "outputId": "4d99eb74-45f4-411c-aced-c285828533c5",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "input shape: torch.Size([1, 2])\n",
+ "output shape: torch.Size([1, 3])\n",
+ "output result: tensor([[0.2512, 0.9572, 0.4520]], grad_fn=)\n"
+ ]
+ }
+ ],
"source": [
"# Test the model with example input\n",
"x_input = torch.tensor([[1, 2.]])\n",
@@ -442,20 +605,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {
"id": "K4aCflPVyViD"
},
"outputs": [],
"source": [
+ "\n",
"### Defining a model using subclassing ###\n",
"\n",
"class LinearWithSigmoidActivation(nn.Module):\n",
" def __init__(self, num_inputs, num_outputs):\n",
" super(LinearWithSigmoidActivation, self).__init__()\n",
" '''TODO: define a model with a single Linear layer and sigmoid activation.'''\n",
- " self.linear = '''TODO: linear layer'''\n",
- " self.activation = '''TODO: sigmoid activation'''\n",
+ " self.linear = nn.Linear(num_inputs,num_outputs)\n",
+ " self.activation = nn.Sigmoid()\n",
"\n",
" def forward(self, inputs):\n",
" linear_output = self.linear(inputs)\n",
@@ -474,11 +638,25 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "V-eNhSyRG6hl"
- },
- "outputs": [],
+ "execution_count": 26,
+ "metadata": {
+ "id": "V-eNhSyRG6hl",
+ "outputId": "24733da0-2bd7-41ae-fdf6-1d3efab30ae3",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "input shape: torch.Size([1, 2])\n",
+ "output shape: torch.Size([1, 3])\n",
+ "output result: tensor([[0.6735, 0.4807, 0.6996]], grad_fn=)\n"
+ ]
+ }
+ ],
"source": [
"n_input_nodes = 2\n",
"n_output_nodes = 3\n",
@@ -501,7 +679,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"metadata": {
"id": "P7jzGX5D1xT5"
},
@@ -517,7 +695,11 @@
" '''TODO: Implement the behavior where the network outputs the input, unchanged,\n",
" under control of the isidentity argument.'''\n",
" def forward(self, inputs, isidentity=False):\n",
- " ''' TODO '''\n"
+ " if isidentity:\n",
+ " return inputs\n",
+ " else:\n",
+ " return self.linear(inputs)\n",
+ "\n"
]
},
{
@@ -531,20 +713,33 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "NzC0mgbk5dp2"
- },
- "outputs": [],
+ "execution_count": 31,
+ "metadata": {
+ "id": "NzC0mgbk5dp2",
+ "outputId": "3d1544fd-94a4-4628-92f9-cc603eed714c",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "input: tensor([[1., 2.]])\n",
+ "Network linear output: tensor([[-0.0834, 2.0875, 1.2564]], grad_fn=); network identity output: tensor([[1., 2.]])\n"
+ ]
+ }
+ ],
"source": [
"# Test the IdentityModel\n",
"model = LinearButSometimesIdentity(num_inputs=2, num_outputs=3)\n",
"x_input = torch.tensor([[1, 2.]])\n",
"\n",
"'''TODO: pass the input into the model and call with and without the input identity option.'''\n",
- "out_with_linear = # TODO\n",
+ "out_with_linear = model(x_input)\n",
"\n",
- "out_with_identity = # TODO\n",
+ "out_with_identity = model(x_input, isidentity = True)\n",
"\n",
"print(f\"input: {x_input}\")\n",
"print(\"Network linear output: {}; network identity output: {}\".format(out_with_linear, out_with_identity))"
@@ -576,11 +771,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {
- "id": "tdkqk8pw5yJM"
- },
- "outputs": [],
+ "execution_count": 27,
+ "metadata": {
+ "id": "tdkqk8pw5yJM",
+ "outputId": "2b9d67f0-c8ce-4313-b853-fa2db81390e4",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "dy_dx of y=x^2 at x=3.0 is: tensor(6.)\n"
+ ]
+ }
+ ],
"source": [
"### Gradient computation ###\n",
"\n",
@@ -606,7 +813,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {
"attributes": {
"classes": [
@@ -614,9 +821,32 @@
],
"id": ""
},
- "id": "7g1yWiSXqEf-"
- },
- "outputs": [],
+ "id": "7g1yWiSXqEf-",
+ "outputId": "e1e08891-9b5b-4fb2-d6b7-eed3eed76c2b",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 466
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Initializing x=-1.1003597974777222\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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1qxZ+vLL8we877//Xu+//74WLlyonJwcSVLXrl3d+xu6qpKTkxUXFyfJ1bLz7LPP6quvvlJ2drb7OcuXL9err76qESNGaObMmbrkkkv0/PPPS5J69uypTZs26U9/+pMHz9q5EWo8bB+hBgBMEx4arK1/GGXaezfHZ599pqioKNXV1cnpdOq2227Tk08+qUmTJqlfv36NxtFs2LBBu3btUnR0dKPXqKmp0e7du1VWVqaioiINHz7cvS8kJERDhgw5b7dYXl6egoODNWLEiCbXvGvXLlVXV+vaa69ttL22tlYDBw6UJG3btq1RHZLcAcjbCDUetu9k91OXDoynAYC2ZrFYWtUF1JauuuoqzZw5U1arVenp6QoJOVV3ZGTj35DKykoNHjxYb7/99lmvk5SU1KL3b+hOao7KStfs3vnz56tjx46N9tlsthbV4Un+8c37kX3HaKkBAFxcZGSkunXr1qRjBw0apPfee0/JycmKiYk55zFpaWlauXKlrrzySklSfX291q5dq0GDBp3z+H79+snpdGrp0qXu7qfTNbQUORwO97Y+ffrIZrOpoKDgvC08vXv31qefftpo23fffXfxD+kBzH7yMHdLTQItNQAAzxg/frwSExM1duxYffPNN8rPz9eSJUv07//+79q/f78k6cEHH9T06dM1b948bd++XQ888MAF15jJzMzUhAkT9Mtf/lLz5s1zv+b7778vSerSpYssFos+++wzHTlyRJWVlYqOjtbDDz+s3/zmN5ozZ452796tdevW6eWXX9acOXMkSffdd5927typRx55RDt27NA777yj2bNne/sUSSLUeFSlvV4llbWSpM601AAAPCQiIkLLli1T586dddNNN6l37966++67VVNT4265eeihh3THHXdowoQJys7OVnR0tG688cYLvu7MmTP1b//2b3rggQfUq1cv3XPPPaqqcv2f844dO+qpp57So48+qpSUFE2ePFmS9Mc//lGPPfaYcnNz1bt3b40ePVrz589XVlaWJKlz58768MMPNW/ePA0YMECzZs3Ss88+68Wzc4rFaO7Eej9WXl6u2NhYlZWVnbf5rjW2HizXj1/6RvERoVr/+HUef30AwCk1NTXKz89XVlaWwsLCzC4HrXSh77Opv9+01HgQg4QBADAPocaDGCQMAIB5CDUe5F6jJoFQAwBAWyPUeBDdTwAA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Sjq7+6mgoEBjx45VVFSUYmJidPPNN+vw4cPu/U8++aQuu+wyvfXWW8rMzFRsbKx+8YtfqKKiwrsnDUCzEWoAeN2MGTOUnZ2te+65R0VFRSoqKlJGRoZKS0t19dVXa+DAgVqzZo0WLFigw4cP6+abb270/Dlz5shqterbb7/VrFmzJElBQUF66aWXtGXLFs2ZM0dff/21fvvb30qSLr/8cr344ouKiYlxv9/DDz98Vl1Op1Njx47VsWPHtHTpUi1cuFB79uzRLbfc0ui43bt3a968efrss8/02WefaenSpZo+fbqXzhaAlqL7CYDXxcbGymq1KiIiQqmpqe7tf/nLXzRw4EA9++yz7m1vvPGGMjIy9P3336tHjx6SpO7du+u//uu/Gr3m6eNzMjMz9fTTT+u+++7TX//6V1mtVsXGxspisTR6vzMtWrRImzZtUn5+vjIyMiRJf//733XppZdq9erVGjp0qCRX+Jk9e7aio6MlSXfccYcWLVqkZ555pnUnBoBH0VIDwDQbNmzQ4sWLFRUV5b716tVLkqt1pMHgwYPPeu5XX32la665Rh07dlR0dLTuuOMOHT16VNXV1U1+/23btikjI8MdaCSpT58+iouL07Zt29zbMjMz3YFGktLS0lRcXNyszwrA+2ipAWCayspK3XDDDfrTn/501r60tDT3/cjIyEb79u7dq5/85Ce6//779cwzzyghIUHLly/X3XffrdraWkVERHi0ztDQ0EaPLRaLnE6nR98DQOsRagC0CavVKofD0WjboEGD9OGHHyozM1MhIU3/52jt2rVyOp16/vnnFRTkanB+//33L/p+Z+rdu7cKCwtVWFjobq3ZunWrSktL1adPnybXA8A30P0EoE1kZmZq5cqV2rt3r0pKSuR0OjVp0iQdO3ZMt956q1avXq3du3fryy+/1F133XXBQNKtWzfV1dXp5Zdf1p49e/TWW2+5BxCf/n6VlZVatGiRSkpKztktlZOTo379+mn8+PFat26dVq1apTvvvFMjRozQkCFDPH4OAHgXoQZAm3j44YcVHBysPn36KCkpSQUFBUpPT9e3334rh8Oh6667Tv369dOUKVMUFxfnboE5lwEDBuiFF17Qn/70J/Xt21dvv/22cnNzGx1z+eWX67777tMtt9yipKSkswYaS65upE8++UTx8fG68sorlZOTo65du+q9997z+OcH4H0WwzAMs4sAAABoLVpqAABAQCDUAACAgECoAQAAAYFQAwAAAgKhBgAABARCDQAACAiEGgAAEBAINQAAICAQagAAQEAg1AAAgIBAqAEAAAHh/wOoixiea5o6lwAAAABJRU5ErkJggg==\n"
+ },
+ "metadata": {}
+ }
+ ],
"source": [
"### Function minimization with autograd and gradient descent ###\n",
"\n",
@@ -635,7 +865,7 @@
" x = torch.tensor([x], requires_grad=True)\n",
"\n",
" # TODO: Compute the loss as the square of the difference between x and x_f\n",
- " loss = # TODO\n",
+ " loss = (x - x_f) **2\n",
"\n",
" # Backpropagate through the loss to compute gradients\n",
" loss.backward()\n",
@@ -665,17 +895,16 @@
}
],
"metadata": {
- "accelerator": "GPU",
"colab": {
"collapsed_sections": [
"WBk0ZDWY-ff8"
],
"name": "PT_Part1_Intro.ipynb",
- "provenance": []
+ "provenance": [],
+ "include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
- "language": "python",
"name": "python3"
},
"language_info": {
@@ -698,4 +927,4 @@
},
"nbformat": 4,
"nbformat_minor": 0
-}
+}
\ No newline at end of file
diff --git a/lab1/PT_Part2_Music_Generation.ipynb b/lab1/PT_Part2_Music_Generation.ipynb
index a99bca7d..3c6ad794 100644
--- a/lab1/PT_Part2_Music_Generation.ipynb
+++ b/lab1/PT_Part2_Music_Generation.ipynb
@@ -21,7 +21,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {
"id": "bUik05YqMyCH"
},
@@ -66,16 +66,30 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
- "id": "riVZCVK65QTH"
+ "id": "riVZCVK65QTH",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "2c5e607f-71a0-4ee1-f81a-ddb0c8365a7c"
},
- "outputs": [],
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "Gym has been unmaintained since 2022 and does not support NumPy 2.0 amongst other critical functionality.\n",
+ "Please upgrade to Gymnasium, the maintained drop-in replacement of Gym, or contact the authors of your software and request that they upgrade.\n",
+ "See the migration guide at https://gymnasium.farama.org/introduction/migration_guide/ for additional information.\n"
+ ]
+ }
+ ],
"source": [
"!pip install comet_ml > /dev/null 2>&1\n",
"import comet_ml\n",
"# TODO: ENTER YOUR API KEY HERE!! instructions above\n",
- "COMET_API_KEY = \"\"\n",
+ "COMET_API_KEY = \"wtmmeE3OhvyqV1Pbo1G6eVW4I\"\n",
"\n",
"# Import PyTorch and other relevant libraries\n",
"import torch\n",
@@ -119,11 +133,35 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
- "id": "P7dFnP5q3Jve"
+ "id": "P7dFnP5q3Jve",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "38b560d2-9230-4014-fc05-922fb2d90cee"
},
- "outputs": [],
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Found 817 songs in text\n",
+ "\n",
+ "Example song: \n",
+ "X:1\n",
+ "T:Alexander's\n",
+ "Z: id:dc-hornpipe-1\n",
+ "M:C|\n",
+ "L:1/8\n",
+ "K:D Major\n",
+ "(3ABc|dAFA DFAd|fdcd FAdf|gfge fefd|(3efe (3dcB A2 (3ABc|!\n",
+ "dAFA DFAd|fdcd FAdf|gfge fefd|(3efe dc d2:|!\n",
+ "AG|FAdA FAdA|GBdB GBdB|Acec Acec|dfaf gecA|!\n",
+ "FAdA FAdA|GBdB GBdB|Aceg fefd|(3efe dc d2:|!\n"
+ ]
+ }
+ ],
"source": [
"# Download the dataset\n",
"songs = mdl.lab1.load_training_data()\n",
@@ -145,11 +183,35 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
- "id": "11toYzhEEKDz"
+ "id": "11toYzhEEKDz",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 75
+ },
+ "outputId": "52836051-ca12-4443-a499-4d091f08a356"
},
- "outputs": [],
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "text/html": [
+ "\n",
+ "