diff --git a/lab1/Part1_TensorFlow.ipynb b/lab1/Part1_TensorFlow.ipynb index 2a60a3ee..e6d5d29e 100644 --- a/lab1/Part1_TensorFlow.ipynb +++ b/lab1/Part1_TensorFlow.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "3eI6DUic-6jo" }, @@ -59,11 +59,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "LkaimNJfYZ2w" }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "UsageError: Line magic function `%tensorflow_version` not found.\n" + ] + } + ], "source": [ "%tensorflow_version 2.x\n", "import tensorflow as tf\n", @@ -90,13 +98,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: comet_ml in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (3.35.5)\n", + "Requirement already satisfied: jsonschema!=3.1.0,>=2.6.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (4.20.0)\n", + "Requirement already satisfied: psutil>=5.6.3 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (5.9.7)\n", + "Requirement already satisfied: python-box<7.0.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (6.1.0)\n", + "Requirement already satisfied: requests-toolbelt>=0.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.0.0)\n", + "Requirement already satisfied: requests>=2.18.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.31.0)\n", + "Requirement already satisfied: semantic-version>=2.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.10.0)\n", + "Requirement already satisfied: sentry-sdk>=1.1.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.39.1)\n", + "Requirement already satisfied: simplejson in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (3.19.2)\n", + "Requirement already satisfied: six in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.16.0)\n", + "Requirement already satisfied: urllib3>=1.21.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.1.0)\n", + "Requirement already satisfied: websocket-client<1.4.0,>=0.55.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.3.3)\n", + "Requirement already satisfied: wrapt>=1.11.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.14.1)\n", + "Requirement already satisfied: wurlitzer>=1.0.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (3.0.3)\n", + "Requirement already satisfied: everett<3.2.0,>=1.0.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from everett[ini]<3.2.0,>=1.0.1; python_version > \"3.5\"->comet_ml) (3.1.0)\n", + "Requirement already satisfied: dulwich!=0.20.33,>=0.20.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (0.21.7)\n", + "Requirement already satisfied: rich>=13.3.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (13.7.0)\n", + "Requirement already satisfied: configobj in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from everett[ini]<3.2.0,>=1.0.1; python_version > \"3.5\"->comet_ml) (5.0.8)\n", + "Requirement already satisfied: attrs>=22.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (23.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (2023.12.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (0.32.0)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (0.16.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (3.6)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (2023.11.17)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from rich>=13.3.2->comet_ml) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from rich>=13.3.2->comet_ml) (2.17.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from markdown-it-py>=2.2.0->rich>=13.3.2->comet_ml) (0.1.2)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/shornaalam/Library/Python/3.9/lib/python/site-packages/urllib3/__init__.py:34: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020\n", + " warnings.warn(\n", + "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Experiment is live on comet.com https://www.comet.com/alamshorna/6-s191lab1-part0/1578e67424f44838956cf55921507277\n", + "\n" + ] + } + ], "source": [ "%pip install comet_ml\n", "import comet_ml\n", - "comet_ml.init(project_name=\"6.s191lab1.1\")\n", + "comet_ml.init(project_name=\"6.s191lab1_part0\")\n", "comet_experiment = comet_ml.Experiment()" ] }, @@ -117,11 +173,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "id": "tFxztZQInlAB" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "`sport` is a 0-d Tensor\n", + "`number` is a 0-d Tensor\n" + ] + } + ], "source": [ "sport = tf.constant(\"Tennis\", tf.string)\n", "number = tf.constant(1.41421356237, tf.float64)\n", @@ -141,11 +206,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "id": "oaHXABe8oPcO" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "`sports` is a 1-d Tensor with shape: [2]\n", + "`numbers` is a 1-d Tensor with shape: [3]\n" + ] + } + ], "source": [ "sports = tf.constant([\"Tennis\", \"Basketball\"], tf.string)\n", "numbers = tf.constant([3.141592, 1.414213, 2.71821], tf.float64)\n", @@ -165,11 +239,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "id": "tFeBBe1IouS3" }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (2135268709.py, line 4)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[6], line 4\u001b[0;36m\u001b[0m\n\u001b[0;31m matrix = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "### Defining higher-order Tensors ###\n", "\n", @@ -182,11 +265,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "id": "Zv1fTn_Ya_cz" }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (3638284108.py, line 4)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[7], line 4\u001b[0;36m\u001b[0m\n\u001b[0;31m images = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "'''TODO: Define a 4-d Tensor.'''\n", "# Use tf.zeros to initialize a 4-d Tensor of zeros with size 10 x 256 x 256 x 3. \n", @@ -209,11 +301,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "id": "FhaufyObuLEG" }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'matrix' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m row_vector \u001b[38;5;241m=\u001b[39m \u001b[43mmatrix\u001b[49m[\u001b[38;5;241m1\u001b[39m]\n\u001b[1;32m 2\u001b[0m column_vector \u001b[38;5;241m=\u001b[39m matrix[:,\u001b[38;5;241m1\u001b[39m]\n\u001b[1;32m 3\u001b[0m scalar \u001b[38;5;241m=\u001b[39m matrix[\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m]\n", + "\u001b[0;31mNameError\u001b[0m: name 'matrix' is not defined" + ] + } + ], "source": [ "row_vector = matrix[1]\n", "column_vector = matrix[:,1]\n", @@ -239,11 +343,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "id": "X_YJrZsxYZ2z" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tf.Tensor(76, shape=(), dtype=int32)\n", + "tf.Tensor(76, shape=(), dtype=int32)\n" + ] + } + ], "source": [ "# Create the nodes in the graph, and initialize values\n", "a = tf.constant(15)\n", @@ -275,12 +388,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "id": "PJnfzpWyYZ23", "scrolled": true }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (2842955949.py, line 6)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[10], line 6\u001b[0;36m\u001b[0m\n\u001b[0;31m c = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "### Defining Tensor computations ###\n", "\n", @@ -304,11 +426,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "id": "pnwsf8w2uF7p" }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'func' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[11], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m a, b \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1.5\u001b[39m, \u001b[38;5;241m2.5\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Execute the computation\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m e_out \u001b[38;5;241m=\u001b[39m \u001b[43mfunc\u001b[49m(a,b)\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(e_out)\n", + "\u001b[0;31mNameError\u001b[0m: name 'func' is not defined" + ] + } + ], "source": [ "# Consider example values for a,b\n", "a, b = 1.5, 2.5\n", @@ -344,11 +478,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "id": "HutbJk-1kHPh" }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (3348410941.py, line 21)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[13], line 21\u001b[0;36m\u001b[0m\n\u001b[0;31m z = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "### Defining a network Layer ###\n", "\n", @@ -399,11 +542,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "id": "7WXTpmoL6TDz" }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (1637575462.py, line 17)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[14], line 17\u001b[0;36m\u001b[0m\n\u001b[0;31m dense_layer = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "### Defining a neural network using the Sequential API ###\n", "\n", @@ -438,11 +590,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": { "id": "sg23OczByRDb" }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (1147042231.py, line 5)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[15], line 5\u001b[0;36m\u001b[0m\n\u001b[0;31m model_output = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "# Test model with example input\n", "x_input = tf.constant([[1,2.]], shape=(1,2))\n", @@ -463,7 +624,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "id": "K4aCflPVyViD" }, @@ -499,11 +660,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": { "id": "LhB34RA-4gXb" }, - "outputs": [], + "outputs": [ + { + "ename": "TypeError", + "evalue": "'str' object is not callable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[17], line 6\u001b[0m\n\u001b[1;32m 2\u001b[0m model \u001b[38;5;241m=\u001b[39m SubclassModel(n_output_nodes)\n\u001b[1;32m 4\u001b[0m x_input \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mconstant([[\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m2.\u001b[39m]], shape\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m2\u001b[39m))\n\u001b[0;32m----> 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx_input\u001b[49m\u001b[43m)\u001b[49m)\n", + "Cell \u001b[0;32mIn[16], line 16\u001b[0m, in \u001b[0;36mSubclassModel.call\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcall\u001b[39m(\u001b[38;5;28mself\u001b[39m, inputs):\n\u001b[0;32m---> 16\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdense_layer\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mTypeError\u001b[0m: 'str' object is not callable" + ] + } + ], "source": [ "n_output_nodes = 3\n", "model = SubclassModel(n_output_nodes)\n", @@ -524,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "id": "P7jzGX5D1xT5" }, @@ -561,11 +735,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "id": "NzC0mgbk5dp2" }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (1653467696.py, line 6)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[19], line 6\u001b[0;36m\u001b[0m\n\u001b[0;31m out_activate = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "n_output_nodes = 3\n", "model = IdentityModel(n_output_nodes)\n", @@ -607,7 +790,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": { "id": "tdkqk8pw5yJM" }, @@ -640,7 +823,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": { "attributes": { "classes": [ @@ -650,7 +833,16 @@ }, "id": "7g1yWiSXqEf-" }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (1241769730.py, line 17)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m Cell \u001b[0;32mIn[21], line 17\u001b[0;36m\u001b[0m\n\u001b[0;31m loss = # TODO\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "### Function minimization with automatic differentiation and SGD ###\n", "\n", @@ -669,8 +861,8 @@ " with tf.GradientTape() as tape:\n", " '''TODO: define the loss as described above'''\n", " loss = # TODO\n", - "\n", " comet_experiment.log_metric(\"loss\", loss, step=i) \n", + "\n", " # loss minimization using gradient tape\n", " grad = tape.gradient(loss, x) # compute the derivative of the loss with respect to x\n", " new_x = x - learning_rate*grad # sgd update\n", diff --git a/lab1/Part2_Music_Generation.ipynb b/lab1/Part2_Music_Generation.ipynb index 010684a1..9ea6e448 100644 --- a/lab1/Part2_Music_Generation.ipynb +++ b/lab1/Part2_Music_Generation.ipynb @@ -69,11 +69,6 @@ }, "outputs": [], "source": [ - "%pip install comet_ml\n", - "import comet_ml\n", - "comet_ml.init(project_name=\"6.s191lab1.2\")\n", - "comet_experiment = comet_ml.Experiment()\n", - "\n", "# Import Tensorflow 2.0\n", "%tensorflow_version 2.x\n", "import tensorflow as tf \n", @@ -82,6 +77,12 @@ "!pip install mitdeeplearning\n", "import mitdeeplearning as mdl\n", "\n", + "# Import Comet\n", + "!pip install comet_ml\n", + "import comet_ml\n", + "comet_ml.init(project_name=\"6.s191lab1_part2\")\n", + "comet_experiment = comet_ml.Experiment()\n", + "\n", "# Import all remaining packages\n", "import numpy as np\n", "import os\n", diff --git a/lab1/solutions/Part1_TensorFlow_Solution.ipynb b/lab1/solutions/Part1_TensorFlow_Solution.ipynb index 610889fd..fd75bb64 100644 --- a/lab1/solutions/Part1_TensorFlow_Solution.ipynb +++ b/lab1/solutions/Part1_TensorFlow_Solution.ipynb @@ -95,7 +95,7 @@ "source": [ "%pip install comet_ml\n", "import comet_ml\n", - "comet_ml.init(project_name=\"6.s191lab1.1.0\")\n", + "comet_ml.init(project_name=\"6.s191lab1_part0\")\n", "comet_experiment = comet_ml.Experiment()" ] }, diff --git a/lab1/solutions/Part2_Music_Generation_Solution.ipynb b/lab1/solutions/Part2_Music_Generation_Solution.ipynb index 531be2cd..a1a57388 100644 --- a/lab1/solutions/Part2_Music_Generation_Solution.ipynb +++ b/lab1/solutions/Part2_Music_Generation_Solution.ipynb @@ -63,150 +63,34 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 27, "metadata": { "id": "riVZCVK65QTH" }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Defaulting to user installation because normal site-packages is not writeable\n", - "Requirement already satisfied: comet_ml in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (3.35.5)\n", - "Requirement already satisfied: jsonschema!=3.1.0,>=2.6.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (4.20.0)\n", - "Requirement already satisfied: psutil>=5.6.3 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (5.9.7)\n", - "Requirement already satisfied: python-box<7.0.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (6.1.0)\n", - "Requirement already satisfied: requests-toolbelt>=0.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.0.0)\n", - "Requirement already satisfied: requests>=2.18.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.31.0)\n", - "Requirement already satisfied: semantic-version>=2.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.10.0)\n", - "Requirement already satisfied: sentry-sdk>=1.1.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.39.1)\n", - "Requirement already satisfied: simplejson in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (3.19.2)\n", - "Requirement already satisfied: six in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.16.0)\n", - "Requirement already satisfied: urllib3>=1.21.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.1.0)\n", - "Requirement already satisfied: websocket-client<1.4.0,>=0.55.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.3.3)\n", - "Requirement already satisfied: wrapt>=1.11.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.14.1)\n", - "Requirement already satisfied: wurlitzer>=1.0.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (3.0.3)\n", - "Requirement already satisfied: everett<3.2.0,>=1.0.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from everett[ini]<3.2.0,>=1.0.1; python_version > \"3.5\"->comet_ml) (3.1.0)\n", - "Requirement already satisfied: dulwich!=0.20.33,>=0.20.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (0.21.7)\n", - "Requirement already satisfied: rich>=13.3.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (13.7.0)\n", - "Requirement already satisfied: configobj in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from everett[ini]<3.2.0,>=1.0.1; python_version > \"3.5\"->comet_ml) (5.0.8)\n", - "Requirement already satisfied: attrs>=22.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (23.2.0)\n", - "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (2023.12.1)\n", - "Requirement already satisfied: referencing>=0.28.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (0.32.0)\n", - "Requirement already satisfied: rpds-py>=0.7.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (0.16.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (3.6)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (2023.11.17)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from rich>=13.3.2->comet_ml) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from rich>=13.3.2->comet_ml) (2.17.2)\n", - "Requirement already satisfied: mdurl~=0.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from markdown-it-py>=2.2.0->rich>=13.3.2->comet_ml) (0.1.2)\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m To get all data logged automatically, import comet_ml before the following modules: tensorboard, keras, tensorflow.\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Comet.ml Experiment Summary\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Data:\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m display_summary_level : 1\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m url : https://www.comet.com/alamshorna/6-s191lab1-2/c0a5596410204fefa0bfaa59e068064b\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Uploads:\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m environment details : 1\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m filename : 1\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m git metadata : 1\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m git-patch (uncompressed) : 1 (232.78 KB)\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m installed packages : 1\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m notebook : 1\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m source_code : 1\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m \n", - "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m To get all data logged automatically, import comet_ml before the following modules: tensorboard, keras, tensorflow.\n", - "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", - "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Experiment is live on comet.com https://www.comet.com/alamshorna/6-s191lab1-2/56e08cf4e5cd419087375c47a4982d2a\n", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Defaulting to user installation because normal site-packages is not writeable\n", - "Requirement already satisfied: tensorflow in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (2.15.0)\n", - "Requirement already satisfied: tensorflow-macos==2.15.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow) (2.15.0)\n", - "Requirement already satisfied: absl-py>=1.0.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (2.0.0)\n", - "Requirement already satisfied: astunparse>=1.6.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (1.6.3)\n", - "Requirement already satisfied: flatbuffers>=23.5.26 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (23.5.26)\n", - "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (0.5.4)\n", - "Requirement already satisfied: google-pasta>=0.1.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (0.2.0)\n", - "Requirement already satisfied: h5py>=2.9.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (3.10.0)\n", - "Requirement already satisfied: libclang>=13.0.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (16.0.6)\n", - "Requirement already satisfied: ml-dtypes~=0.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (0.2.0)\n", - "Requirement already satisfied: numpy<2.0.0,>=1.23.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (1.26.2)\n", - "Requirement already satisfied: opt-einsum>=2.3.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (3.3.0)\n", - "Requirement already satisfied: packaging in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (23.2)\n", - "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (4.23.4)\n", - "Requirement already satisfied: setuptools in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (69.0.3)\n", - "Requirement already satisfied: six>=1.12.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (1.16.0)\n", - "Requirement already satisfied: termcolor>=1.1.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (2.4.0)\n", - "Requirement already satisfied: typing-extensions>=3.6.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (4.9.0)\n", - "Requirement already satisfied: wrapt<1.15,>=1.11.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (1.14.1)\n", - "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (0.34.0)\n", - "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (1.60.0)\n", - "Requirement already satisfied: tensorboard<2.16,>=2.15 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (2.15.1)\n", - "Requirement already satisfied: tensorflow-estimator<2.16,>=2.15.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (2.15.0)\n", - "Requirement already satisfied: keras<2.16,>=2.15.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorflow-macos==2.15.0->tensorflow) (2.15.0)\n", - "Requirement already satisfied: wheel<1.0,>=0.23.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from astunparse>=1.6.0->tensorflow-macos==2.15.0->tensorflow) (0.42.0)\n", - "Requirement already satisfied: google-auth<3,>=1.6.3 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (2.25.2)\n", - "Requirement already satisfied: google-auth-oauthlib<2,>=0.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (1.2.0)\n", - "Requirement already satisfied: markdown>=2.6.8 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (3.5.1)\n", - "Requirement already satisfied: requests<3,>=2.21.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (2.31.0)\n", - "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (0.7.2)\n", - "Requirement already satisfied: werkzeug>=1.0.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (3.0.1)\n", - "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (5.3.2)\n", - "Requirement already satisfied: pyasn1-modules>=0.2.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (0.3.0)\n", - "Requirement already satisfied: rsa<5,>=3.1.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (4.9)\n", - "Requirement already satisfied: requests-oauthlib>=0.7.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (1.3.1)\n", - "Requirement already satisfied: importlib-metadata>=4.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from markdown>=2.6.8->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (7.0.1)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (3.3.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (3.6)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (2.1.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (2023.11.17)\n", - "Requirement already satisfied: MarkupSafe>=2.1.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from werkzeug>=1.0.1->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (2.1.3)\n", - "Requirement already satisfied: zipp>=0.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (3.17.0)\n", - "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (0.5.1)\n", - "Requirement already satisfied: oauthlib>=3.0.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow-macos==2.15.0->tensorflow) (3.2.2)\n", - "Defaulting to user installation because normal site-packages is not writeable\n", - "Requirement already satisfied: mitdeeplearning in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (0.3.0)\n", - "Requirement already satisfied: numpy in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (1.26.2)\n", - "Requirement already satisfied: regex in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (2023.12.25)\n", - "Requirement already satisfied: tqdm in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (4.66.1)\n", - "Requirement already satisfied: gym in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (0.26.2)\n", - "Requirement already satisfied: cloudpickle>=1.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from gym->mitdeeplearning) (3.0.0)\n", - "Requirement already satisfied: gym-notices>=0.0.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from gym->mitdeeplearning) (0.0.8)\n", - "Requirement already satisfied: importlib-metadata>=4.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from gym->mitdeeplearning) (7.0.1)\n", - "Requirement already satisfied: zipp>=0.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from importlib-metadata>=4.8.0->gym->mitdeeplearning) (3.17.0)\n" + "UsageError: Line magic function `%tensorflow_version` not found.\n" ] } ], "source": [ - "%pip install comet_ml\n", - "import comet_ml\n", - "comet_ml.init(project_name=\"6.s191lab1.2\")\n", - "comet_experiment = comet_ml.Experiment()\n", - "\n", "# Import Tensorflow 2.0\n", - "# %tensorflow_version 2.x\n", - "!pip install tensorflow\n", + "%tensorflow_version 2.x\n", "import tensorflow as tf \n", "\n", "# Download and import the MIT Introduction to Deep Learning package\n", "!pip install mitdeeplearning\n", "import mitdeeplearning as mdl\n", "\n", + "# Import Comet\n", + "!pip install comet_ml\n", + "import comet_ml\n", + "comet_ml.init(project_name=\"6.s191lab1.2\")\n", + "comet_experiment = comet_ml.Experiment()\n", + "\n", "# Import all remaining packages\n", "import numpy as np\n", "import os\n", @@ -237,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 28, "metadata": { "id": "P7dFnP5q3Jve" }, @@ -283,7 +167,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 30, "metadata": { "id": "11toYzhEEKDz" }, @@ -314,7 +198,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 6, "metadata": { "id": "IlCgQBRVymwR" }, @@ -364,7 +248,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "metadata": { "id": "IalZLbvOzf-F" }, @@ -394,7 +278,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "metadata": { "id": "FYyNlCNXymwY" }, @@ -438,7 +322,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 9, "metadata": { "id": "g-LnKyu4dczc" }, @@ -475,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 10, "metadata": { "id": "l1VKcQHcymwb" }, @@ -511,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 11, "metadata": { "id": "LF-N8F7BoDRi" }, @@ -573,7 +457,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 12, "metadata": { "id": "0eBu9WZG84i0" }, @@ -583,20 +467,20 @@ "output_type": "stream", "text": [ "Step 0\n", - " input: 9 ('-')\n", - " expected output: 65 ('j')\n", + " input: 56 ('a')\n", + " expected output: 62 ('g')\n", "Step 1\n", - " input: 65 ('j')\n", - " expected output: 64 ('i')\n", + " input: 62 ('g')\n", + " expected output: 61 ('f')\n", "Step 2\n", - " input: 64 ('i')\n", - " expected output: 62 ('g')\n", + " input: 61 ('f')\n", + " expected output: 82 ('|')\n", "Step 3\n", - " input: 62 ('g')\n", - " expected output: 9 ('-')\n", + " input: 82 ('|')\n", + " expected output: 2 ('!')\n", "Step 4\n", - " input: 9 ('-')\n", - " expected output: 17 ('5')\n" + " input: 2 ('!')\n", + " expected output: 0 ('\\n')\n" ] } ], @@ -651,7 +535,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 13, "metadata": { "id": "8DsWzojvkbc7" }, @@ -678,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 14, "metadata": { "id": "MtCrdfzEI2N0" }, @@ -727,7 +611,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 15, "metadata": { "id": "RwG1DD6rDrRM" }, @@ -769,7 +653,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 16, "metadata": { "id": "C-_70kKAPrPU" }, @@ -809,7 +693,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 17, "metadata": { "id": "4V4MfFg0RQJg" }, @@ -817,15 +701,15 @@ { "data": { "text/plain": [ - "array([63, 14, 72, 22, 60, 25, 38, 39, 33, 77, 5, 62, 12, 35, 64, 79, 37,\n", - " 60, 21, 82, 78, 59, 1, 38, 42, 42, 1, 8, 73, 48, 68, 75, 61, 27,\n", - " 28, 10, 73, 8, 8, 69, 59, 15, 19, 77, 37, 8, 65, 50, 24, 32, 69,\n", - " 62, 61, 56, 40, 68, 26, 66, 1, 64, 73, 76, 63, 34, 67, 20, 80, 5,\n", - " 59, 68, 24, 60, 67, 64, 0, 35, 81, 40, 70, 71, 12, 2, 61, 24, 74,\n", - " 75, 71, 21, 21, 31, 65, 12, 52, 15, 71, 20, 34, 38, 10, 14])" + "array([ 0, 81, 2, 6, 82, 75, 40, 32, 37, 20, 57, 32, 10, 74, 73, 5, 40,\n", + " 63, 33, 54, 62, 71, 71, 73, 40, 75, 23, 75, 68, 2, 54, 32, 63, 12,\n", + " 37, 37, 81, 75, 69, 69, 46, 57, 18, 24, 24, 26, 39, 32, 77, 82, 30,\n", + " 77, 75, 24, 16, 8, 59, 3, 2, 0, 73, 54, 19, 38, 0, 51, 45, 69,\n", + " 3, 35, 66, 6, 66, 34, 63, 47, 19, 14, 35, 69, 60, 69, 25, 78, 70,\n", + " 72, 23, 49, 29, 36, 52, 39, 66, 58, 74, 60, 10, 56, 7, 34])" ] }, - "execution_count": 21, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -847,7 +731,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 18, "metadata": { "id": "xWcFwPwLSo05" }, @@ -857,10 +741,10 @@ "output_type": "stream", "text": [ "Input: \n", - " 'ggf g2ga|bgag edBA|G2BG dGBG|ABAG FDD2|!\\n[1 dggf g2ga|bgag edBA|G2BG dGBG|AGFA G2:|!\\n[2 dgg2 bgg2|ag'\n", + " '3D E3C|DFEC D3:|!\\nK:D Major\\nA|dcde f2ed|cdef g2fe|dcde f2ed|cAGE EDD2|!\\ndcde f2ed|cdef g2fe|fgfd efe'\n", "\n", "Next Char Predictions: \n", - " \"h2q:e>MNHv'g0JixLe9|wd MQQ ,rWmtfBC.r,,nd37vL,jY=GngfaOmAk iruhIl8y'dm=eli\\nJzOop0!f=stp99Fj0[3p8IM.2\"\n" + " '\\nz!(|tOGL8bG.sr\\'OhH^gpprOtwoq" ] @@ -1000,32 +884,12 @@ "name": "stderr", "output_type": "stream", "text": [ - " 5%|▌ | 109/2000 [00:34<10:01, 3.14it/s]\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[27], line 53\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m \u001b[38;5;28miter\u001b[39m \u001b[38;5;129;01min\u001b[39;00m tqdm(\u001b[38;5;28mrange\u001b[39m(num_training_iterations)):\n\u001b[1;32m 50\u001b[0m \n\u001b[1;32m 51\u001b[0m \u001b[38;5;66;03m# Grab a batch and propagate it through the network\u001b[39;00m\n\u001b[1;32m 52\u001b[0m x_batch, y_batch \u001b[38;5;241m=\u001b[39m get_batch(vectorized_songs, seq_length, batch_size)\n\u001b[0;32m---> 53\u001b[0m loss \u001b[38;5;241m=\u001b[39m \u001b[43mtrain_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx_batch\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_batch\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 55\u001b[0m comet_experiment\u001b[38;5;241m.\u001b[39mlog_metric(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mloss\u001b[39m\u001b[38;5;124m\"\u001b[39m, loss\u001b[38;5;241m.\u001b[39mnumpy()\u001b[38;5;241m.\u001b[39mmean(), step\u001b[38;5;241m=\u001b[39m\u001b[38;5;28miter\u001b[39m)\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# Update the progress bar\u001b[39;00m\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:832\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 829\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 831\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 832\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 834\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 835\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:868\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 865\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 866\u001b[0m \u001b[38;5;66;03m# In this case we have created variables on the first call, so we run the\u001b[39;00m\n\u001b[1;32m 867\u001b[0m \u001b[38;5;66;03m# defunned version which is guaranteed to never create variables.\u001b[39;00m\n\u001b[0;32m--> 868\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtracing_compilation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 869\u001b[0m \u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_no_variable_creation_config\u001b[49m\n\u001b[1;32m 870\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 871\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variable_creation_config \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 872\u001b[0m \u001b[38;5;66;03m# Release the lock early so that multiple threads can perform the call\u001b[39;00m\n\u001b[1;32m 873\u001b[0m \u001b[38;5;66;03m# in parallel.\u001b[39;00m\n\u001b[1;32m 874\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:139\u001b[0m, in \u001b[0;36mcall_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 137\u001b[0m bound_args \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mbind(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 138\u001b[0m flat_inputs \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39munpack_inputs(bound_args)\n\u001b[0;32m--> 139\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_flat\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# pylint: disable=protected-access\u001b[39;49;00m\n\u001b[1;32m 140\u001b[0m \u001b[43m \u001b[49m\u001b[43mflat_inputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcaptured_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfunction\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcaptured_inputs\u001b[49m\n\u001b[1;32m 141\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/polymorphic_function/concrete_function.py:1323\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, tensor_inputs, captured_inputs)\u001b[0m\n\u001b[1;32m 1319\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1320\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1321\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1322\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1323\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_inference_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_preflattened\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1324\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1325\u001b[0m args,\n\u001b[1;32m 1326\u001b[0m possible_gradient_type,\n\u001b[1;32m 1327\u001b[0m executing_eagerly)\n\u001b[1;32m 1328\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:216\u001b[0m, in \u001b[0;36mAtomicFunction.call_preflattened\u001b[0;34m(self, args)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcall_preflattened\u001b[39m(\u001b[38;5;28mself\u001b[39m, args: Sequence[core\u001b[38;5;241m.\u001b[39mTensor]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 215\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Calls with flattened tensor inputs and returns the structured output.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 216\u001b[0m flat_outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_flat\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mpack_output(flat_outputs)\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:251\u001b[0m, in \u001b[0;36mAtomicFunction.call_flat\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m record\u001b[38;5;241m.\u001b[39mstop_recording():\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mexecuting_eagerly():\n\u001b[0;32m--> 251\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_bound_context\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_function\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunction_type\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mflat_outputs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 256\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 257\u001b[0m outputs \u001b[38;5;241m=\u001b[39m make_call_op_in_graph(\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28mlist\u001b[39m(args),\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mfunction_call_options\u001b[38;5;241m.\u001b[39mas_attrs(),\n\u001b[1;32m 261\u001b[0m )\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/context.py:1486\u001b[0m, in \u001b[0;36mContext.call_function\u001b[0;34m(self, name, tensor_inputs, num_outputs)\u001b[0m\n\u001b[1;32m 1484\u001b[0m cancellation_context \u001b[38;5;241m=\u001b[39m cancellation\u001b[38;5;241m.\u001b[39mcontext()\n\u001b[1;32m 1485\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cancellation_context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1486\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1487\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mutf-8\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1488\u001b[0m \u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnum_outputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1489\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtensor_inputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1490\u001b[0m \u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1491\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1492\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1493\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1494\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute_with_cancellation(\n\u001b[1;32m 1495\u001b[0m name\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 1496\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39mnum_outputs,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1500\u001b[0m cancellation_manager\u001b[38;5;241m=\u001b[39mcancellation_context,\n\u001b[1;32m 1501\u001b[0m )\n", - "File \u001b[0;32m~/Library/Python/3.9/lib/python/site-packages/tensorflow/python/eager/execute.py:53\u001b[0m, in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 52\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m---> 53\u001b[0m tensors \u001b[38;5;241m=\u001b[39m \u001b[43mpywrap_tfe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTFE_Py_Execute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_handle\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mop_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "100%|██████████| 2000/2000 [11:25<00:00, 2.92it/s]\n" ] }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGwCAYAAACHJU4LAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABV1ElEQVR4nO3dd1iVZeMH8O9h74MyRGSJCxXErbhNXFlp9qqZadowy94yy8xfe2L1ZpaaaUNtmC1Hy4V7CygqDlREQWWoyFKZ5/79gRzO5gAHngf4fq6L6+I845z74QDP99xTIYQQICIiIpIhK6kLQERERGQMgwoRERHJFoMKERERyRaDChEREckWgwoRERHJFoMKERERyRaDChEREcmWjdQFqAmVSoWrV6/C1dUVCoVC6uIQERGRGYQQyMvLg6+vL6ysTNeZ1OugcvXqVfj7+0tdDCIiIqqG1NRU+Pn5mTymXgcVV1dXAGUX6ubmJnFpiIiIyBy5ubnw9/dX38dNqddBpby5x83NjUGFiIionjGn2wY70xIREZFsMagQERGRbDGoEBERkWwxqBAREZFsMagQERGRbDGoEBERkWwxqBAREZFsMagQERGRbDGoEBERkWwxqBAREZFsMagQERGRbDGoEBERkWwxqBihUgkUFJdKXQwiIqJGjUHFiIlfH0TIG5uQdatI6qIQERE1WgwqRhxKzgIARJ/OkLgkREREjReDChEREckWgwoRERHJFoMKERERyRaDSmWE1AUgIiJqvBhUiIiISLYYVIiIiEi2GFSIiIhIthhUiIiISLYYVIiIiEi2GFSIiIhIthhUiIiISLYYVIiIiEi2GFSIiIhItiQNKkFBQVAoFHpfM2fOlLJYREREJBM2Ur54TEwMSktL1Y8TEhIwdOhQjBs3TsJSaROcQ5+IiEgykgYVLy8vrcfz589Hq1atMHDgQIlKRERERHIiaVDRVFRUhB9//BGzZ8+GQqEweExhYSEKCwvVj3Nzc+uqeERERCQB2XSmXb9+PbKzszF16lSjx0RFRUGpVKq//P39666AREREVOdkE1S+/fZbjBw5Er6+vkaPmTdvHnJyctRfqampdVhCIiIiqmuyaPq5dOkSoqOjsXbtWpPH2dvbw97evo5KRURERFKTRY3KihUr4O3tjVGjRkldFCIiIpIRyYOKSqXCihUr8Nhjj8HGRhYVPERERCQTkgeV6OhopKSk4PHHH5e6KERERCQzkldhDBs2DEJwUjUiIiLSJ3mNChEREZExDCqVYGUPERGRdBhUiIiISLYYVIiIiEi2GFSIiIhIthhUiIiISLYYVIiIiEi2GFSIiIhIthhUiIiISLYYVIiIiEi2GFSIiIhIthhUiIiISLYYVCrBGfSJiIikw6BCREREssWgQkRERLLFoEJERESyxaBCREREssWgQkRERLLFoEJERESyxaBCREREssWgUol5a08gMT1P6mIQERE1SgwqZhj31X6pi0BERNQoMaiYIbegROoiEBERNUoMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFsMKkRERCRbDCpEREQkWwwqREREJFuSB5UrV67g0UcfhYeHBxwdHREWFobY2Fipi0VEREQyYCPli9+8eRN9+/bF4MGDsXHjRnh5eeHcuXNo0qSJlMUiIiIimZA0qHz00Ufw9/fHihUr1NtatmwpYYmIiIhITiRt+vnzzz/RvXt3jBs3Dt7e3ujSpQu+/vpro8cXFhYiNzdX64uIiIgaLkmDyoULF7B06VK0adMGmzdvxjPPPIPnn38eq1atMnh8VFQUlEql+svf37+OS0xERER1SSGEEFK9uJ2dHbp37479+/ertz3//POIiYnBgQMH9I4vLCxEYWGh+nFubi78/f2Rk5MDNzc3i5Yt6NV/tB5fnD/Kos9PRETUWOXm5kKpVJp1/5a0RqV58+bo0KGD1rb27dsjJSXF4PH29vZwc3PT+iIiIqKGS9Kg0rdvXyQmJmptO3v2LAIDAyUqEREREcmJpEHlxRdfxMGDB/Hhhx/i/PnzWL16NZYvX46ZM2dKWSwiIiKSCUmDSo8ePbBu3Tr8/PPPCA0NxXvvvYeFCxdi0qRJUhaLiIiIZELSeVQA4L777sN9990ndTGIiIhIhiSfQl+OJBwIRURERBoYVIiIiEi2GFSIiIhIthhUDGDLDxERkTwwqBAREZFsMagYwAoVIiIieWBQISIiItliUCEiIiLZYlAxgPOoEBERyQODChEREckWgwoRERHJFoOKAWz4ISIikgcGFSIiIpItBhUi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", "text/plain": [ "
" ] @@ -1100,7 +964,7 @@ " \n", "# Save the trained model and the weights\n", "model.save_weights(checkpoint_prefix)\n", - "comet_experiment.end()\n" + "\n" ] }, { @@ -1133,11 +997,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": { "id": "LycQ-ot_jjyu" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_3\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " embedding_3 (Embedding) (1, None, 256) 21248 \n", + " \n", + " lstm_3 (LSTM) (1, None, 1024) 5246976 \n", + " \n", + " dense_3 (Dense) (1, None, 83) 85075 \n", + " \n", + "=================================================================\n", + "Total params: 5353299 (20.42 MB)\n", + "Trainable params: 5353299 (20.42 MB)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "_________________________________________________________________\n" + ] + } + ], "source": [ "'''TODO: Rebuild the model using a batch_size=1'''\n", "model = build_model(vocab_size, embedding_dim, rnn_units, batch_size=1) # TODO\n", @@ -1184,7 +1070,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "id": "WvuwZBX5Ogfd" }, @@ -1233,11 +1119,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": { "id": "ktovv0RFhrkn" }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1000/1000 [00:03<00:00, 319.10it/s]\n" + ] + } + ], "source": [ "'''TODO: Use the model and the function defined above to generate ABC format text of length 1000!\n", " As you may notice, ABC files start with \"X\" - this may be a good start string.'''\n", @@ -1258,11 +1152,52 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": { "id": "LrOtG64bfLto" }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/shornaalam/Library/Python/3.9/lib/python/site-packages/mitdeeplearning/bin/abc2wav: line 5: abc2midi: command not found\n", + "/Users/shornaalam/Library/Python/3.9/lib/python/site-packages/mitdeeplearning/bin/abc2wav: line 6: timidity: command not found\n", + "rm: tmp.mid: No such file or directory\n", + "/Users/shornaalam/Library/Python/3.9/lib/python/site-packages/mitdeeplearning/bin/abc2wav: line 5: abc2midi: command not found\n", + "/Users/shornaalam/Library/Python/3.9/lib/python/site-packages/mitdeeplearning/bin/abc2wav: line 6: timidity: command not found\n", + "rm: tmp.mid: No such file or directory\n", + "/Users/shornaalam/Library/Python/3.9/lib/python/site-packages/mitdeeplearning/bin/abc2wav: line 5: abc2midi: command not found\n", + "/Users/shornaalam/Library/Python/3.9/lib/python/site-packages/mitdeeplearning/bin/abc2wav: line 6: timidity: command not found\n", + "rm: tmp.mid: No such file or directory\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Comet.ml Experiment Summary\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Data:\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m display_summary_level : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m url : https://www.comet.com/alamshorna/6-s191lab1-2/334ed2abdb254615adbc7af864d4a4de\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Metrics [count] (min, max):\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m loss [2693] : (0.8645305037498474, 7.345831394195557)\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Uploads:\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m environment details : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m filename : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m git metadata : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m git-patch (uncompressed) : 1 (20.12 KB)\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m installed packages : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m notebook : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m source_code : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m \n", + "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m To get all data logged automatically, import comet_ml before the following modules: tensorboard, tensorflow, keras.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 3 songs in text\n" + ] + } + ], "source": [ "### Play back generated songs ###\n", "\n", @@ -1275,7 +1210,10 @@ " # If its a valid song (correct syntax), lets play it! \n", " if waveform:\n", " print(\"Generated song\", i)\n", - " ipythondisplay.display(waveform)" + " ipythondisplay.display(waveform)\n", + "\n", + "\n", + "comet_experiment.end()" ] }, { diff --git a/lab1/solutions/training_checkpoints/checkpoint b/lab1/solutions/training_checkpoints/checkpoint new file mode 100644 index 00000000..9b903449 --- /dev/null +++ b/lab1/solutions/training_checkpoints/checkpoint @@ -0,0 +1,2 @@ +model_checkpoint_path: "my_ckpt" +all_model_checkpoint_paths: "my_ckpt" diff --git a/lab1/solutions/training_checkpoints/my_ckpt.data-00000-of-00001 b/lab1/solutions/training_checkpoints/my_ckpt.data-00000-of-00001 new file mode 100644 index 00000000..ff5ca8f1 Binary files /dev/null and b/lab1/solutions/training_checkpoints/my_ckpt.data-00000-of-00001 differ diff --git a/lab1/solutions/training_checkpoints/my_ckpt.index b/lab1/solutions/training_checkpoints/my_ckpt.index new file mode 100644 index 00000000..0862a04a Binary files /dev/null and b/lab1/solutions/training_checkpoints/my_ckpt.index differ diff --git a/lab3/Part1_IntroductionCapsa.ipynb b/lab3/Part1_IntroductionCapsa.ipynb index e6871272..13990ba4 100644 --- a/lab3/Part1_IntroductionCapsa.ipynb +++ b/lab3/Part1_IntroductionCapsa.ipynb @@ -87,14 +87,105 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "id": "NdXF4Reyj6yy" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: comet_ml in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (3.35.5)\n", + "Requirement already satisfied: jsonschema!=3.1.0,>=2.6.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (4.20.0)\n", + "Requirement already satisfied: psutil>=5.6.3 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (5.9.7)\n", + "Requirement already satisfied: python-box<7.0.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (6.1.0)\n", + "Requirement already satisfied: requests-toolbelt>=0.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.0.0)\n", + "Requirement already satisfied: requests>=2.18.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.31.0)\n", + "Requirement already satisfied: semantic-version>=2.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.10.0)\n", + "Requirement already satisfied: sentry-sdk>=1.1.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.39.1)\n", + "Requirement already satisfied: simplejson in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (3.19.2)\n", + "Requirement already satisfied: six in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.16.0)\n", + "Requirement already satisfied: urllib3>=1.21.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (2.1.0)\n", + "Requirement already satisfied: websocket-client<1.4.0,>=0.55.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.3.3)\n", + "Requirement already satisfied: wrapt>=1.11.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (1.14.1)\n", + "Requirement already satisfied: wurlitzer>=1.0.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (3.0.3)\n", + "Requirement already satisfied: everett<3.2.0,>=1.0.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from everett[ini]<3.2.0,>=1.0.1; python_version > \"3.5\"->comet_ml) (3.1.0)\n", + "Requirement already satisfied: dulwich!=0.20.33,>=0.20.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (0.21.7)\n", + "Requirement already satisfied: rich>=13.3.2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from comet_ml) (13.7.0)\n", + "Requirement already satisfied: configobj in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from everett[ini]<3.2.0,>=1.0.1; python_version > \"3.5\"->comet_ml) (5.0.8)\n", + "Requirement already satisfied: attrs>=22.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (23.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (2023.12.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (0.32.0)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from jsonschema!=3.1.0,>=2.6.0->comet_ml) (0.16.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (3.6)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from requests>=2.18.4->comet_ml) (2023.11.17)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from rich>=13.3.2->comet_ml) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from rich>=13.3.2->comet_ml) (2.17.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from markdown-it-py>=2.2.0->rich>=13.3.2->comet_ml) (0.1.2)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Comet.ml Experiment Summary\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m ---------------------------------------------------------------------------------------\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Data:\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m display_summary_level : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m url : https://www.comet.com/alamshorna/6-s191lab2-2-1/335de97019f04a7c9f218e5d78e7f46e\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Uploads:\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m environment details : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m filename : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m git metadata : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m git-patch (uncompressed) : 1 (604 bytes)\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m installed packages : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m notebook : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m source_code : 1\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m \n", + "\u001b[1;38;5;214mCOMET WARNING:\u001b[0m As you are running in a Jupyter environment, you will need to call `experiment.end()` when finished to ensure all metrics and code are logged before exiting.\n", + "\u001b[1;38;5;39mCOMET INFO:\u001b[0m Experiment is live on comet.com https://www.comet.com/alamshorna/6-s191lab3-1-1/b4519279411840de93d67b140b03986b\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: mitdeeplearning in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (0.3.0)\n", + "Requirement already satisfied: numpy in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (1.26.2)\n", + "Requirement already satisfied: regex in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (2023.12.25)\n", + "Requirement already satisfied: tqdm in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (4.66.1)\n", + "Requirement already satisfied: gym in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from mitdeeplearning) (0.26.2)\n", + "Requirement already satisfied: cloudpickle>=1.2.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from gym->mitdeeplearning) (3.0.0)\n", + "Requirement already satisfied: gym-notices>=0.0.4 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from gym->mitdeeplearning) (0.0.8)\n", + "Requirement already satisfied: importlib-metadata>=4.8.0 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from gym->mitdeeplearning) (7.0.1)\n", + "Requirement already satisfied: zipp>=0.5 in /Users/shornaalam/Library/Python/3.9/lib/python/site-packages (from importlib-metadata>=4.8.0->gym->mitdeeplearning) (3.17.0)\n", + "Defaulting to user installation because normal site-packages is not writeable\n", + "\u001b[31mERROR: Could not find a version that satisfies the requirement capsa (from versions: none)\u001b[0m\u001b[31m\n", + "\u001b[0m\u001b[31mERROR: No matching distribution found for capsa\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + }, + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'capsa'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 23\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[38;5;66;03m# Download and import Capsa\u001b[39;00m\n\u001b[1;32m 22\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39msystem(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpip install capsa\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m---> 23\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mcapsa\u001b[39;00m\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'capsa'" + ] + } + ], "source": [ "# Import Tensorflow 2.0\n", - "%tensorflow_version 2.x\n", + "# %tensorflow_version 2.x\n", "import tensorflow as tf\n", "\n", "import IPython\n", @@ -127,11 +218,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "id": "fH40EhC1j9dH" }, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 15\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m x, y\n\u001b[1;32m 14\u001b[0m \u001b[38;5;66;03m# Plot the dataset and visualize the train and test datapoints\u001b[39;00m\n\u001b[0;32m---> 15\u001b[0m x_train, y_train \u001b[38;5;241m=\u001b[39m \u001b[43mgen_data\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m4\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m4\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtrain\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# train data\u001b[39;00m\n\u001b[1;32m 16\u001b[0m x_test, y_test \u001b[38;5;241m=\u001b[39m gen_data(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m6\u001b[39m, \u001b[38;5;241m500\u001b[39m, train\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;66;03m# test data\u001b[39;00m\n\u001b[1;32m 18\u001b[0m plt\u001b[38;5;241m.\u001b[39mfigure(figsize\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m10\u001b[39m, \u001b[38;5;241m6\u001b[39m))\n", + "Cell \u001b[0;32mIn[2], line 5\u001b[0m, in \u001b[0;36mgen_data\u001b[0;34m(x_min, x_max, n, train)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgen_data\u001b[39m(x_min, x_max, n, train\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m train: \n\u001b[0;32m----> 5\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mtriangular(x_min, \u001b[38;5;241m2\u001b[39m, x_max, size\u001b[38;5;241m=\u001b[39m(n, \u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \n\u001b[1;32m 7\u001b[0m x \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mlinspace(x_min, x_max, n)\u001b[38;5;241m.\u001b[39mreshape(n, \u001b[38;5;241m1\u001b[39m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'np' is not defined" + ] + } + ], "source": [ "# Get the data for the cubic function, injected with noise and missing-ness\n", "# This is just a toy dataset that we can use to test some of the wrappers on\n", @@ -572,7 +676,16 @@ "name": "python3" }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.6" } }, "nbformat": 4,