Python homework about Tensorflow (2 questions)

Online tutoring services

Need help with this question or any other Geology assignment help task? Click on the button below to to hire an expert cheap.

Python assignment about Tensorflow. Questions: "In the above code example change the total epochs to 5 while keeping all other parameters the same. Based on that answer following questions: Q.1) Assess the impact of hidden layers on the performance of the model by designing five Deep Neural Networks comprising of hidden layers ranging from 1 to 5 with each hidden layer holding fixed 50 neurons. Plot a graph of the hidden layers vs test accuracy. Q.2) From the above solution, choose the architecture which yields maximum test accuracy. Assess the impact of neurons count in the last hidden layer with respect to the model performance by choosing differnt neurons count from the set {20, 40, 60, 80, 100}. Plot a graph between the neurons count and test accuracy. Note: Don't change the output layer. Only the plots will be evaluated so ensure to display it on your notebook.

Get Help With a similar task to - Python homework about Tensorflow (2 questions)

Login to view and/or buy answers.. or post an answer
Additional Instructions:
__MACOSX/._Tensorflow_Assignment_Edwards_Colton Tensorflow_Assignment_Edwards_Colton/class07_keras.py # -*- coding: utf-8 -*- """class07_keras.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1Wuwnc1KMB1AcTNre_xr3n0mKIJdRS7CH """ import keras from keras.models import Sequential from keras.layers import Dense, Activation import numpy as np import matplotlib.pyplot as plt x = data = np.linspace(1,2,200) y = x*4 + np.random.randn(*x.shape) * 0.3 model = Sequential() model.add(Dense(1, input_dim=1, activation='linear')) model.compile(optimizer='sgd', loss='mse', metrics=['mse']) weights = model.layers[0].get_weights() w_init = weights[0][0][0] b_init = weights[1][0] print('Linear regression model is initialized with weights w: %.2f, b: %.2f' % (w_init, b_init)) model.fit(x,y, batch_size=1, epochs=30, shuffle=False) weights = model.layers[0].get_weights() w_final = weights[0][0][0] b_final = weights[1][0] print('Linear regression model is trained to have weight w: %.2f, b: %.2f' % (w_final, b_final)) predict = model.predict(data) plt.plot(data, predict, 'b', data , y, 'k.') plt.show() __MACOSX/Tensorflow_Assignment_Edwards_Colton/._class07_keras.py Tensorflow_Assignment_Edwards_Colton/class07_tensorflow.ipynb { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "class07_tensorflow.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "code", "metadata": { "id": "XyDQlUC_toBl" }, "source": [ "import tensorflow as tf\r\n", "import numpy as np\r\n", "from tensorflow.keras.layers import Dense, Flatten\r\n", "from tensorflow.keras.models import Sequential\r\n", "from tensorflow.keras.callbacks import ModelCheckpoint" ], "execution_count": 1, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "9ZwiVRkotshp" }, "source": [ "fashion_mnist = tf.keras.datasets.fashion_mnist\r\n", "\r\n", "(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()\r\n", "\r\n", "x_train = x_train / 255.0\r\n", "x_test = x_test / 255.0" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "s_5VnLhXtvS1" }, "source": [ "model = Sequential([\r\n", " Flatten(input_shape=(28, 28)),\r\n", " Dense(512, activation='relu'),\r\n", " Dense(256, activation='relu'),\r\n", " Dense(128, activation='relu'),\r\n", " Dense(64, activation='relu'),\r\n", " Dense(10, activation='softmax')\r\n", "])\r\n", "model.summary()\r\n", "model.compile(optimizer='adam',\r\n", " loss='sparse_categorical_crossentropy',\r\n", " metrics=['acc'])" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "RutBaX8Ctzvp" }, "source": [ "# Create a folder using time information\r\n", "import datetime" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "NWI83XxNt2nm" }, "source": [ "# Create a folder to store the log of training data (specify)\r\n", "log_dir = \"logs/my_board/\" + datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\")\r\n", "\r\n", "# Defining TensorBoard callbacks\r\n", "tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "X2-vp1uUt5oB" }, "source": [ "model.fit(x_train, y_train,\r\n", " validation_data=(x_test, y_test), \r\n", " epochs=10, \r\n", " callbacks=[tensorboard_callback],\r\n", " )" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "cf3K70KCuWY5", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "be1de067-cff1-42ee-d4d7-51724621595a" }, "source": [ "model.summary()" ], "execution_count": 5, "outputs": [ { "output_type": "stream", "text": [ "Model: \"sequential_1\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "flatten_1 (Flatten) (None, 784) 0 \n", "_________________________________________________________________\n", "dense_5 (Dense) (None, 512) 401920 \n", "_________________________________________________________________\n", "dense_6 (Dense) (None, 256) 131328 \n", "_________________________________________________________________\n", "dense_7 (Dense) (None, 128) 32896 \n", "_________________________________________________________________\n", "dense_8 (Dense) (None, 64) 8256 \n", "_________________________________________________________________\n", "dense_9 (Dense) (None, 10) 650 \n", "=================================================================\n", "Total params: 575,050\n", "Trainable params: 575,050\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "IQw19P73uZ-F" }, "source": [ "%load_ext tensorboard" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ZMLeM9fducgL" }, "source": [ "%tensorboard --logdir {log_dir}" ], "execution_count": null, "outputs": [] } ] } __MACOSX/Tensorflow_Assignment_Edwards_Colton/._class07_tensorflow.ipynb Tensorflow_Assignment_Edwards_Colton/class07_keras.ipynb { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "class07_keras.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "code", "metadata": { "id": "rsxg99pJPO-r", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "outputId": "13361ce7-3339-4fd8-8700-f3caed7baced" }, "source": [ "import keras\r\n", "from keras.models import Sequential\r\n", "from keras.layers import Dense, Activation\r\n", "import numpy as np\r\n", "import matplotlib.pyplot as plt \r\n", " \r\n", "x = data = np.linspace(1,2,200)\r\n", "y = x*4 + np.random.randn(*x.shape) * 0.3\r\n", "\r\n", "\r\n", "model = Sequential()\r\n", "model.add(Dense(1, input_dim=1, activation='linear'))\r\n", "\r\n", "model.compile(optimizer='sgd', loss='mse', metrics=['mse'])\r\n", "\r\n", "weights = model.layers[0].get_weights()\r\n", "w_init = weights[0][0][0]\r\n", "b_init = weights[1][0]\r\n", "print('Linear regression model is initialized with weights w: %.2f, b: %.2f' % (w_init, b_init)) \r\n", "\r\n", "\r\n", "model.fit(x,y, batch_size=1, epochs=30, shuffle=False)\r\n", "\r\n", "weights = model.layers[0].get_weights()\r\n", "w_final = weights[0][0][0]\r\n", "b_final = weights[1][0]\r\n", "print('Linear regression model is trained to have weight w: %.2f, b: %.2f' % (w_final, b_final))\r\n", "\r\n", "predict = model.predict(data)\r\n", "\r\n", "plt.plot(data, predict, 'b', data , y, 'k.')\r\n", "plt.show()" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "Linear regression model is initialized with weights w: 1.31, b: 0.00\n", "Epoch 1/30\n", "200/200 [==============================] - 0s 845us/step - loss: 1.8376 - mse: 1.8376\n", "Epoch 2/30\n", "200/200 [==============================] - 0s 782us/step - loss: 0.1797 - mse: 0.1797\n", "Epoch 3/30\n", "200/200 [==============================] - 0s 805us/step - loss: 0.1718 - mse: 0.1718\n", "Epoch 4/30\n", "200/200 [==============================] - 0s 818us/step - loss: 0.1646 - mse: 0.1646\n", "Epoch 5/30\n", "200/200 [==============================] - 0s 772us/step - loss: 0.1580 - mse: 0.1580\n", "Epoch 6/30\n", "200/200 [==============================] - 0s 754us/step - loss: 0.1519 - mse: 0.1519\n", "Epoch 7/30\n", "200/200 [==============================] - 0s 811us/step - loss: 0.1464 - mse: 0.1464\n", "Epoch 8/30\n", "200/200 [==============================] - 0s 750us/step - loss: 0.1413 - mse: 0.1413\n", "Epoch 9/30\n", "200/200 [==============================] - 0s 832us/step - loss: 0.1366 - mse: 0.1366\n", "Epoch 10/30\n", "200/200 [==============================] - 0s 753us/step - loss: 0.1324 - mse: 0.1324\n", "Epoch 11/30\n", "200/200 [==============================] - 0s 794us/step - loss: 0.1285 - mse: 0.1285\n", "Epoch 12/30\n", "200/200 [==============================] - 0s 781us/step - loss: 0.1250 - mse: 0.1250\n", "Epoch 13/30\n", "200/200 [==============================] - 0s 856us/step - loss: 0.1217 - mse: 0.1217\n", "Epoch 14/30\n", "200/200 [==============================] - 0s 827us/step - loss: 0.1187 - mse: 0.1187\n", "Epoch 15/30\n", "200/200 [==============================] - 0s 882us/step - loss: 0.1160 - mse: 0.1160\n", "Epoch 16/30\n", "200/200 [==============================] - 0s 854us/step - loss: 0.1136 - mse: 0.1136\n", "Epoch 17/30\n", "200/200 [==============================] - 0s 826us/step - loss: 0.1113 - mse: 0.1113\n", "Epoch 18/30\n", "200/200 [==============================] - 0s 851us/step - loss: 0.1092 - mse: 0.1092\n", "Epoch 19/30\n", "200/200 [==============================] - 0s 830us/step - loss: 0.1074 - mse: 0.1074\n", "Epoch 20/30\n", "200/200 [==============================] - 0s 820us/step - loss: 0.1057 - mse: 0.1057\n", "Epoch 21/30\n", "200/200 [==============================] - 0s 812us/step - loss: 0.1041 - mse: 0.1041\n", "Epoch 22/30\n", "200/200 [==============================] - 0s 911us/step - loss: 0.1027 - mse: 0.1027\n", "Epoch 23/30\n", "200/200 [==============================] - 0s 747us/step - loss: 0.1014 - mse: 0.1014\n", "Epoch 24/30\n", "200/200 [==============================] - 0s 718us/step - loss: 0.1002 - mse: 0.1002\n", "Epoch 25/30\n", "200/200 [==============================] - 0s 808us/step - loss: 0.0991 - mse: 0.0991\n", "Epoch 26/30\n", "200/200 [==============================] - 0s 747us/step - loss: 0.0982 - mse: 0.0982\n", "Epoch 27/30\n", "200/200 [==============================] - 0s 853us/step - loss: 0.0973 - mse: 0.0973\n", "Epoch 28/30\n", "200/200 [==============================] - 0s 829us/step - loss: 0.0965 - mse: 0.0965\n", "Epoch 29/30\n", "200/200 [==============================] - 0s 741us/step - loss: 0.0957 - mse: 0.0957\n", "Epoch 30/30\n", "200/200 [==============================] - 0s 833us/step - loss: 0.0951 - mse: 0.0951\n", "Linear regression model is trained to have weight w: 3.76, b: 0.50\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] } ] } __MACOSX/Tensorflow_Assignment_Edwards_Colton/._class07_keras.ipynb Tensorflow_Assignment_Edwards_Colton/class07_tensorflow.py # -*- coding: utf-8 -*- """class07_tensorflow.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1zzp7kwaDuH6bv2FepfUqcuUObG7MAu-6 """ import tensorflow as tf import numpy as np from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.models import Sequential from tensorflow.keras.callbacks import ModelCheckpoint fashion_mnist = tf.keras.datasets.fashion_mnist (x_train, y_train), (x_test, y_test) = fashion_mnist.load_data() x_train = x_train / 255.0 x_test = x_test / 255.0 model = Sequential([ Flatten(input_shape=(28, 28)), Dense(512, activation='relu'), Dense(256, activation='relu'), Dense(128, activation='relu'), Dense(64, activation='relu'), Dense(10, activation='softmax') ]) model.summary() model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc']) # Create a folder using time information import datetime # Create a folder to store the log of training data (specify) log_dir = "logs/my_board/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # Defining TensorBoard callbacks tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1) model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=10, callbacks=[tensorboard_callback], ) model.summary() # Commented out IPython magic to ensure Python compatibility. # %load_ext tensorboard # Commented out IPython magic to ensure Python compatibility. # %tensorboard --logdir {log_dir} __MACOSX/Tensorflow_Assignment_Edwards_Colton/._class07_tensorflow.py Tensorflow_Assignment_Edwards_Colton/class07_keras_mnist_sampler.py # -*- coding: utf-8 -*- """class07_keras_mnist_sampler.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1rQBlN4kry4Jy_GTzAxgc37BqYyyOQ2F0 """ from __future__ import absolute_import from __future__ import division from __future__ import print_function import numpy as np from keras.datasets import mnist import matplotlib.pyplot as plt # load dataset (x_train, y_train), (x_test, y_test) = mnist.load_data() # count the number of unique train labels unique, counts = np.unique(y_train, return_counts=True) print("Train labels: ", dict(zip(unique, counts))) # count the number of unique test labels unique, counts = np.unique(y_test, return_counts=True) print("Test labels: ", dict(zip(unique, counts))) # sample 25 mnist digits from train dataset indexes = np.random.randint(0, x_train.shape[0], size=25) images = x_train[indexes] labels = y_train[indexes] print(x_train.shape) print(indexes) plt.figure(figsize=(5,5)) for i in range(len(indexes)): plt.subplot(5, 5, i + 1) image = images[i] plt.imshow(image, cmap='gray') plt.axis('off') #plt.savefig("mnist-samples.png") plt.show() plt.close('all') __MACOSX/Tensorflow_Assignment_Edwards_Colton/._class07_keras_mnist_sampler.py Tensorflow_Assignment_Edwards_Colton/class07_keras_mnist_sampler.ipynb { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "class07_keras_mnist_sampler.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6u4jegfBGau9", "outputId": "2af11aa2-6ea0-4d32-f9c5-0957f04b2635" }, "source": [ "from __future__ import absolute_import\r\n", "from __future__ import division\r\n", "from __future__ import print_function\r\n", "\r\n", "import numpy as np\r\n", "from keras.datasets import mnist\r\n", "import matplotlib.pyplot as plt\r\n", "\r\n", "# load dataset\r\n", "(x_train, y_train), (x_test, y_test) = mnist.load_data()\r\n", "\r\n", "# count the number of unique train labels\r\n", "unique, counts = np.unique(y_train, return_counts=True)\r\n", "print(\"Train labels: \", dict(zip(unique, counts)))\r\n", "\r\n", "# count the number of unique test labels\r\n", "unique, counts = np.unique(y_test, return_counts=True)\r\n", "print(\"Test labels: \", dict(zip(unique, counts)))\r\n", "\r\n" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "text": [ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", "11493376/11490434 [==============================] - 0s 0us/step\n", "Train labels: {0: 5923, 1: 6742, 2: 5958, 3: 6131, 4: 5842, 5: 5421, 6: 5918, 7: 6265, 8: 5851, 9: 5949}\n", "Test labels: {0: 980, 1: 1135, 2: 1032, 3: 1010, 4: 982, 5: 892, 6: 958, 7: 1028, 8: 974, 9: 1009}\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "UXXlwsVUGz38", "outputId": "50fb0736-8eb4-46a4-e6c9-cfb40a897fbc" }, "source": [ "# sample 25 mnist digits from train dataset\r\n", "indexes = np.random.randint(0, x_train.shape[0], size=25)\r\n", "images = x_train[indexes]\r\n", "labels = y_train[indexes]\r\n", "\r\n", "print(x_train.shape)\r\n", "print(indexes)" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "(60000, 28, 28)\n", "[ 7875 49541 14788 42254 8639 52648 37767 59901 16748 37187 5548 40465\n", " 4383 27765 58639 18478 4928 27716 32834 32593 9006 26145 43034 27802\n", " 49284]\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 303 }, "id": "Ug64wSNMHKRI", "outputId": "4ee7f304-f93a-465a-89f3-c6d5e6d9904c" }, "source": [ "plt.figure(figsize=(5,5))\r\n", "for i in range(len(indexes)):\r\n", " plt.subplot(5, 5, i + 1)\r\n", " image = images[i]\r\n", " plt.imshow(image, cmap='gray')\r\n", " plt.axis('off')\r\n", "\r\n", "#plt.savefig(\"mnist-samples.png\")\r\n", "plt.show()\r\n", "plt.close('all')" ], "execution_count": 3, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "<Figure size 360x360 with 25 Axes>" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] } ] } __MACOSX/Tensorflow_Assignment_Edwards_Colton/._class07_keras_mnist_sampler.ipynb Tensorflow_Assignment_Edwards_Colton/Assignment_7_tensorflow.ipynb { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Assignment#7_tensorflow.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "code", "metadata": { "id": "XyDQlUC_toBl" }, "source": [ "import tensorflow as tf\r\n", "import numpy as np\r\n", "from tensorflow.keras.layers import Dense, Flatten\r\n", "from tensorflow.keras.models import Sequential\r\n", "from tensorflow.keras.callbacks import ModelCheckpoint" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "9ZwiVRkotshp" }, "source": [ "fashion_mnist = tf.keras.datasets.fashion_mnist\r\n", "\r\n", "(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()\r\n", "\r\n", "x_train = x_train / 255.0\r\n", "x_test = x_test / 255.0" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "s_5VnLhXtvS1" }, "source": [ "model = Sequential([\r\n", " Flatten(input_shape=(28, 28)),\r\n", " Dense(512, activation='relu'),\r\n", " Dense(256, activation='relu'),\r\n", " Dense(128, activation='relu'),\r\n", " Dense(64, activation='relu'),\r\n", " Dense(10, activation='softmax')\r\n", "])\r\n", "\r\n", "model.compile(optimizer='adam',\r\n", " loss='sparse_categorical_crossentropy',\r\n", " metrics=['acc'])" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "RutBaX8Ctzvp" }, "source": [ "# Create a folder using time information\r\n", "import datetime" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "NWI83XxNt2nm" }, "source": [ "# Create a folder to store the log of training data (specify)\r\n", "log_dir = \"logs/my_board/\" + datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\")\r\n", "\r\n", "# Defining TensorBoard callbacks\r\n", "tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "X2-vp1uUt5oB" }, "source": [ "model.fit(x_train, y_train,\r\n", " validation_data=(x_test, y_test), \r\n", " epochs=10, \r\n", " callbacks=[tensorboard_callback],\r\n", " )" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "LDYiiGx_iZwo" }, "source": [ "results = model.evaluate(x_test, y_test)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "y1KEyqwpnU9z" }, "source": [ "#Model accuracy\r\n", "print('Accuracy of model prediction:',results[1])" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "cf3K70KCuWY5" }, "source": [ "model.summary()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "IQw19P73uZ-F" }, "source": [ "%load_ext tensorboard" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ZMLeM9fducgL" }, "source": [ "%tensorboard --logdir {log_dir}" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "R3ESzdbd0qtW" }, "source": [ "# **Assignment #7**\r\n", "\r\n", "In the above code example change the total epochs to 5 while keeping all other parameters the same. Based on that answer following questions:\r\n", "\r\n", "**Q.1)** Assess the impact of hidden layers on the performance of the model by designing five Deep Neural Networks comprising of hidden layers ranging from 1 to 5 with each hidden layer holding fixed 50 neurons. Plot a graph of the hidden layers vs test accuracy. \r\n", "<br><br>\r\n", "**Q.2)** From the above solution, choose the architecture which yields maximum test accuracy. Assess the impact of neurons count in the last hidden layer with respect to the model performance by choosing differnt neurons count from the set {20, 40, 60, 80, 100}. Plot a graph between the neurons count and test accuracy.\r\n", "<br><br>\r\n", "**Note:** \r\n", "* Don't change the output layer. \r\n", "* Only the plots will be evaluated so ensure to display it on your notebook." ] } ] } __MACOSX/Tensorflow_Assignment_Edwards_Colton/._Assignment_7_tensorflow.ipynb

Related Questions

Similar orders to Python homework about Tensorflow (2 questions)
35
Views
0
Answers
geology/ mineral identification
I need help completing a geology assignment (identification of igneous, sedimentary, and metamorphic minerals). I have to identify about 30 minerals (10 from each group). All I have to do is look at a photo of the minerals on a website and write down their names. I've attached the assignment and the corresponding website....
22
Views
0
Answers
geology/ mineral identification
I need help completing a geology assignment (identification of igneous, sedimentary, and metamorphic minerals). I have to identify about 30 minerals (10 from each group). All I have to do is look at a photo of the minerals on a website and write down their names. I've attached the assignment and the corresponding website....
81
Views
0
Answers
Environmental geology weekly lab reports
Weekly lab reports about environmental geology. I have a kit with rocks and other lab materials needed to do the lab reports. Basic rocks types and how they were made when the universe was created...
171
Views
0
Answers
Project Evaluation of Oil and Gas Field
The assignment comprises the production of a field development plan for an oilfield. It is split into two parts, and data for the case study is provided below....