commit 580d6fd0595d8b065e89313dd0ebec6a4ed5b387
parent 66f972c6a8269853f878cb81449476a1e84b8552
Author: Andrew <andrewlaack1@gmail.com>
Date: Tue, 11 Jun 2024 07:04:52 -0500
Started working with keras for deep learning.
Diffstat:
3 files changed, 799 insertions(+), 0 deletions(-)
diff --git a/fashionMNIST/MLPFasionMNIST.ipynb b/fashionMNIST/MLPFasionMNIST.ipynb
@@ -0,0 +1,498 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import tensorflow as tf\n",
+ "\n",
+ "fashion_mnist = tf.keras.datasets.fashion_mnist.load_data()\n",
+ "\n",
+ "# Split train, validation, test\n",
+ "(X_train_full, y_train_full) , (X_test, y_test) = fashion_mnist\n",
+ "X_train, y_train = X_train_full[:-5000], y_train_full[:-5000]\n",
+ "X_valid, y_valid = X_train_full[-5000:], y_train_full[-5000:]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(55000, 28, 28)"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "dtype('uint8')"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train.dtype"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train, X_valid, X_test = X_train / 255., X_valid / 255., X_test / 255."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "class_names = [\"T-shirt/top\", \"Trouser\", \"Pullover\", \"Dress\", \"Coat\",\n",
+ "\"Sandal\", \"Shirt\", \"Sneaker\", \"Bag\", \"Ankle boot\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "tf.random.set_seed(10)\n",
+ "\n",
+ "# simple model where layers are sequential\n",
+ "model = tf.keras.Sequential()\n",
+ "\n",
+ "# input\n",
+ "model.add(tf.keras.layers.Input(shape=[28,28]))\n",
+ "\n",
+ "# convert inputs into 1d array (preprocessing)\n",
+ "model.add(tf.keras.layers.Flatten())\n",
+ "\n",
+ "# first hidden\n",
+ "model.add(tf.keras.layers.Dense(300, activation='relu'))\n",
+ "\n",
+ "# second hidden\n",
+ "model.add(tf.keras.layers.Dense(100,activation='relu'))\n",
+ "\n",
+ "# output using softmax to get sum of 1 output with logs\n",
+ "model.add(tf.keras.layers.Dense(10,activation='softmax'))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Note\n",
+ "\n",
+ "Instead of doing what was done above, we can call tf.keras.Sequential and then pass in a python list of the layers without having to do the .add bit each time."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential_1\"</span>\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1mModel: \"sequential_1\"\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+ "┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
+ "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+ "│ flatten_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">784</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">300</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">235,500</span> │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_4 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">100</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">30,100</span> │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_5 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">10</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">1,010</span> │\n",
+ "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+ "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
+ "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+ "│ flatten_1 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m784\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m300\u001b[0m) │ \u001b[38;5;34m235,500\u001b[0m │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_4 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m100\u001b[0m) │ \u001b[38;5;34m30,100\u001b[0m │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m1,010\u001b[0m │\n",
+ "└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">266,610</span> (1.02 MB)\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m266,610\u001b[0m (1.02 MB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">266,610</span> (1.02 MB)\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m266,610\u001b[0m (1.02 MB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model.summary()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 0.01645865, 0.03546067, -0.05682132, ..., 0.00900105,\n",
+ " -0.07353848, -0.01912361],\n",
+ " [ 0.06523621, 0.0171279 , -0.04132329, ..., -0.01150481,\n",
+ " -0.04539145, -0.00335996],\n",
+ " [-0.00808337, 0.02399082, -0.05179171, ..., 0.02264993,\n",
+ " -0.06493723, 0.00833919],\n",
+ " ...,\n",
+ " [ 0.03792074, -0.01328152, -0.01112796, ..., 0.0608198 ,\n",
+ " 0.03235608, 0.0042805 ],\n",
+ " [-0.0601988 , 0.07004283, 0.00318228, ..., -0.02014124,\n",
+ " 0.03856488, -0.07357981],\n",
+ " [ 0.03060566, 0.01161554, -0.07438355, ..., -0.01837594,\n",
+ " -0.03390887, -0.03670444]], dtype=float32)"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "weights, biases = model.layers[1].get_weights()\n",
+ "weights"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "biases[0 : 10] # all 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "model.compile(loss='sparse_categorical_crossentropy',\n",
+ " optimizer='sgd',\n",
+ " metrics = ['accuracy'] \n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/30\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2024-06-11 06:04:50.806133: W external/local_tsl/tsl/framework/cpu_allocator_impl.cc:83] Allocation of 172480000 exceeds 10% of free system memory.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 2ms/step - accuracy: 0.6828 - loss: 1.0010 - val_accuracy: 0.8232 - val_loss: 0.5078\n",
+ "Epoch 2/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8273 - loss: 0.4971 - val_accuracy: 0.8402 - val_loss: 0.4490\n",
+ "Epoch 3/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8420 - loss: 0.4438 - val_accuracy: 0.8494 - val_loss: 0.4202\n",
+ "Epoch 4/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8540 - loss: 0.4137 - val_accuracy: 0.8562 - val_loss: 0.4017\n",
+ "Epoch 5/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.8619 - loss: 0.3923 - val_accuracy: 0.8602 - val_loss: 0.3891\n",
+ "Epoch 6/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8681 - loss: 0.3749 - val_accuracy: 0.8624 - val_loss: 0.3780\n",
+ "Epoch 7/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8730 - loss: 0.3608 - val_accuracy: 0.8646 - val_loss: 0.3702\n",
+ "Epoch 8/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.8768 - loss: 0.3487 - val_accuracy: 0.8682 - val_loss: 0.3628\n",
+ "Epoch 9/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8798 - loss: 0.3379 - val_accuracy: 0.8716 - val_loss: 0.3563\n",
+ "Epoch 10/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.8833 - loss: 0.3281 - val_accuracy: 0.8726 - val_loss: 0.3517\n",
+ "Epoch 11/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8856 - loss: 0.3192 - val_accuracy: 0.8756 - val_loss: 0.3481\n",
+ "Epoch 12/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.8883 - loss: 0.3110 - val_accuracy: 0.8776 - val_loss: 0.3443\n",
+ "Epoch 13/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.8914 - loss: 0.3034 - val_accuracy: 0.8774 - val_loss: 0.3412\n",
+ "Epoch 14/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 1ms/step - accuracy: 0.8930 - loss: 0.2963 - val_accuracy: 0.8784 - val_loss: 0.3386\n",
+ "Epoch 15/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8960 - loss: 0.2896 - val_accuracy: 0.8772 - val_loss: 0.3354\n",
+ "Epoch 16/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.8986 - loss: 0.2834 - val_accuracy: 0.8786 - val_loss: 0.3341\n",
+ "Epoch 17/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.9010 - loss: 0.2775 - val_accuracy: 0.8780 - val_loss: 0.3324\n",
+ "Epoch 18/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.9029 - loss: 0.2718 - val_accuracy: 0.8794 - val_loss: 0.3306\n",
+ "Epoch 19/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.9050 - loss: 0.2665 - val_accuracy: 0.8796 - val_loss: 0.3295\n",
+ "Epoch 20/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.9063 - loss: 0.2614 - val_accuracy: 0.8790 - val_loss: 0.3295\n",
+ "Epoch 21/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - accuracy: 0.9080 - loss: 0.2564 - val_accuracy: 0.8810 - val_loss: 0.3281\n",
+ "Epoch 22/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.9101 - loss: 0.2514 - val_accuracy: 0.8810 - val_loss: 0.3272\n",
+ "Epoch 23/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 2ms/step - accuracy: 0.9118 - loss: 0.2468 - val_accuracy: 0.8820 - val_loss: 0.3260\n",
+ "Epoch 24/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 1ms/step - accuracy: 0.9133 - loss: 0.2425 - val_accuracy: 0.8814 - val_loss: 0.3263\n",
+ "Epoch 25/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 2ms/step - accuracy: 0.9145 - loss: 0.2381 - val_accuracy: 0.8826 - val_loss: 0.3251\n",
+ "Epoch 26/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9167 - loss: 0.2338 - val_accuracy: 0.8836 - val_loss: 0.3243\n",
+ "Epoch 27/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.9177 - loss: 0.2298 - val_accuracy: 0.8836 - val_loss: 0.3261\n",
+ "Epoch 28/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.9192 - loss: 0.2259 - val_accuracy: 0.8836 - val_loss: 0.3267\n",
+ "Epoch 29/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 2ms/step - accuracy: 0.9210 - loss: 0.2219 - val_accuracy: 0.8846 - val_loss: 0.3254\n",
+ "Epoch 30/30\n",
+ "\u001b[1m1719/1719\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 2ms/step - accuracy: 0.9226 - loss: 0.2181 - val_accuracy: 0.8840 - val_loss: 0.3252\n"
+ ]
+ }
+ ],
+ "source": [
+ "history = model.fit(X_train, y_train, epochs=30,\n",
+ " validation_data=(X_valid,y_valid))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "<Axes: >"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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Ia1cuZLTTjuNpKQkunTpwvnnn8+2bdtC+/fs2cOll15KSkoKsbGxjBkzhk8//TS0/9///jdjx47F5XKRmprKBRdcENpnsVh47bXXGlwvKSmJp556CoCdO3disVhYvnw5Z555Ji6Xi2effZaioiIuvfRSMjMziYmJYdiwYTz//PMNXicYDHLvvffSv39/nE4nPXv25Pe//z0AEydOZN68eQ2O379/Pw6Hg+zs7Jb42NoVzVNysJQ+sG+d+pWIiNQwDINqX6DNrxttt4U1sqOyspL58+czfPhwKioqWLRoERdccAHr16+nqqqKM888k8zMTN544w0yMjJYt24dwWAQgBUrVnDBBRfw61//mn/84x94vV7efPPNsMu8YMEC7r//fk466SRcLhdut5vRo0dz2223kZCQwIoVK7jiiivo168f48aNA2DhwoU89thj/OlPf+K0004jNzeXTZs2AXD11Vczb9487r//fpxOJwDPPPMMmZmZTJw4MezytXcKJQfTjflERBqo9gUYuujtNr/ud7+ZQoyj+T9TF110UYPnTzzxBF27duW7777j448/Zv/+/Xz++eekpKQA0L9//9Cxv//977nkkku46667QttGjBgRdplvuukmLrzwwgbbbrnlltD6jTfeyNtvv82//vUvxo0bR3l5OQ8++CAPP/wws2fPBqBfv36cdtppAFx44YXMmzeP119/nZ/85CcAPPXUU1x55ZXH5bBtNd8cTMOCRUQ6pC1btnDppZfSt29fEhIS6N27NwA5OTmsX7+ek046KRRIDrZ+/XomTZp0zGUYM2ZMg+eBQIDf/va3DBs2jJSUFOLi4nj77bfJyckBYOPGjXg8niav7XK5uOKKK3jiiScAWLduHRs2bODKK6885rK2R6opOZiGBYuINBBtt/Hdb6ZE5LrhmDp1Kr169eKxxx6je/fuBINBTjzxRLxeb2g69CavdYT9FosFwzAabGusI2tsbGyD5/fddx8PPvggS5cuZdiwYcTGxnLTTTfh9XqbdV0wm3BGjhzJnj17ePLJJ5k4cSK9evU64nkdkWpKDlZbU1K6B/zeyJZFRKQdsFgsxDii2nwJp3miqKiIzZs3c/vttzNp0iSGDBlCcXFxaP/w4cNZv349Bw4caPT84cOHH7bjaNeuXcnNzQ0937JlC1VVVUcs1+rVq5k2bRqXX345I0aMoG/fvnz//feh/QMGDCA6Ovqw1x42bBhjxozhscce47nnnuOqq6464nU7KoWSg8WlgT0WjCCU5ES6NCIi0gzJycl06dKFRx99lK1bt/L+++8zf/780P5LL72UjIwMpk+fzurVq9m+fTsvv/wya9asAWDx4sU8//zzLF68mI0bN/LNN99wzz33hM6fOHEiDz/8MF9++SVffPEF1113HXa7/YjlGjBgAO+++y4ff/wxGzdu5Gc/+xn5+fmh/S6Xi9tuu41bb72Vf/zjH2zbto1PPvmExx9/vMHrXH311dx9990YhtFgVNDxRqHkYBaLbswnItLBWK1WXnjhBdauXcuJJ57IzTffzH333Rfa73A4eOedd0hLS+O8885j2LBh3H333aG72p511lm8+OKLvPHGG4wcOZKJEyfy2Wefhc6///77ycrK4vTTT+eyyy7jlltuadZNC2+//XZGjRrFlClTOOuss0LBqL477riDX/7ylyxatIghQ4YwY8YMCgoKGhxz6aWXEhUVxaWXXorL5TqGT6p9sxgHN5K1Q2VlZSQmJlJaWkpCQkLrX3D55bDx33DOPXDyda1/PRGRdsLtdrNjxw769OlzXP/4dTQ7d+6kX79+fP7554waNSrSxWngcN+ZcH+/1dG1MRoWLCIi7YDP56OoqIjbb7+dk08+ud0Fkpam5pvGaFiwiIi0A6tXr6Zbt258/vnnPPLII5EuTqtTTUljNCxYRETagbPOOuuQocjHM9WUNCZUU7ILgm0/tbKIiEhnpFDSmIRMsDkh6DPnKxEREZFWp1DSGKsVkmtmy1MTjoiISJtQKGmKRuCIiIi0KYWSpmgEjoiISJtSKGlKaASOQomIiEhbOKpQsmzZMnr37o3L5WL8+PENpuJtTElJCXPnzqVbt244nU4GDhzIm2++eVQFbjNqvhER6VDOOussbrrppkgXQ45B2POULF++nPnz5/PII48wfvx4li5dypQpU9i8eTNpaWmHHO/1evnhD39IWloaL730EpmZmezatYukpKSWKH/rSalXU2IY5j1xREREpNWEHUoeeOABrrnmGubMmQPAI488wooVK3jiiSdYsGDBIcc/8cQTHDhwgI8//jh0R8XevXsfW6nbQlJPsNjAXw3leZDQLdIlEhEROa6F1Xzj9XpZu3YtkydPrnsBq5XJkyeHbv98sDfeeIMJEyYwd+5c0tPTOfHEE/nDH/5AIND0pGQej4eysrIGS5uz2SEpy1xXE46ISIdSXFzMrFmzSE5OJiYmhnPPPZctW7aE9u/atYupU6eSnJxMbGwsJ5xwQqhbQXFxMTNnzqRr165ER0czYMAAnnzyyUi9lU4lrJqSwsJCAoEA6enpDbanp6ezadOmRs/Zvn0777//PjNnzuTNN99k69at3HDDDfh8PhYvXtzoOUuWLOGuu+4Kp2itI6UvFO80Q0nvUyNdGhGRyDAM8FW1/XXtMUfddH7llVeyZcsW3njjDRISErjttts477zz+O6777Db7cydOxev18t///tfYmNj+e6774iLiwPgjjvu4LvvvuOtt94iNTWVrVu3Ul1d3ZLvTJrQ6ve+CQaDpKWl8eijj2Kz2Rg9ejR79+7lvvvuazKULFy4kPnz54eel5WVkZWV1dpFPVRKX9j2voYFi0jn5quCP3Rv++v+v33giA37tNowsnr1ak455RQAnn32WbKysnjttdf48Y9/TE5ODhdddBHDhg0DoG/fvqHzc3JyOOmkkxgzZgzQQbocHCfCCiWpqanYbDby8/MbbM/PzycjI6PRc7p164bdbsdms4W2DRkyhLy8PLxeLw6H45BznE4nTqcznKK1Dt2YT0Skw9m4cSNRUVGMHz8+tK1Lly4MGjSIjRs3AvDzn/+c66+/nnfeeYfJkydz0UUXMXz4cACuv/56LrroItatW8fZZ5/N9OnTQ+FGWldYocThcDB69Giys7OZPn06YNaEZGdnM2/evEbPOfXUU3nuuecIBoNYrWYXlu+//55u3bo1GkjaFQ0LFhExm1H+377IXLeVXH311UyZMoUVK1bwzjvvsGTJEu6//35uvPFGzj33XHbt2sWbb77Ju+++y6RJk5g7dy5//OMfW608Ygp7npL58+fz2GOP8fTTT7Nx40auv/56KisrQ6NxZs2axcKFC0PHX3/99Rw4cIBf/OIXfP/996xYsYI//OEPzJ07t+XeRWsJhZKdZpuqiEhnZLGYzShtvRxlf5IhQ4bg9/v59NNPQ9uKiorYvHkzQ4cODW3Lysriuuuu45VXXuGXv/wljz32WGhf165dmT17Ns888wxLly7l0UcfPfrPT5ot7D4lM2bMYP/+/SxatIi8vDxGjhzJypUrQ51fc3JyQjUiYP5Hf/vtt7n55psZPnw4mZmZ/OIXv+C2225ruXfRWmpvyucphaoDENslsuUREZEjGjBgANOmTeOaa67hb3/7G/Hx8SxYsIDMzEymTZsGwE033cS5557LwIEDKS4u5oMPPmDIkCEALFq0iNGjR3PCCSfg8Xj4z3/+E9onreuoOrrOmzevyeaaVatWHbJtwoQJfPLJJ0dzqciyR0NCJpTtNZtwFEpERDqEJ598kl/84hecf/75eL1ezjjjDN58883QfFmBQIC5c+eyZ88eEhISOOecc/jTn/4EmF0VFi5cyM6dO4mOjub000/nhRdeiOTb6TQshtH+2yXKyspITEyktLSUhISEtr34U+fDzv/BBY/CiBlte20RkTbmdrvZsWMHffr0weVyRbo40gEc7jsT7u+3bsh3JLXTzWtYsIiISKtSKDkSDQsWERFpEwolR6JhwSIiIm1CoeRIQqFEzTciIiKtSaHkSGr7lFQVgrs0smURERE5jimUHIkzHmK7muuqLREREWk1CiXNUduEoxE4IiIirUahpDk0AkdERKTVKZQ0h0bgiIiItDqFkubQCBwRkeNe7969Wbp0aaSL0akplDRH7QgchRIREZFWo1DSHLU1JeX7wFsV2bKIiIgcJBAIEAwGI12MY6ZQ0hzRyeBKNNeLd0a0KCIicqhHH32U7t27H/LDPG3aNK666iq2bdvGtGnTSE9PJy4ujrFjx/Lee+8d9fUeeOABhg0bRmxsLFlZWdxwww1UVFQ0OGb16tWcddZZxMTEkJyczJQpUyguLgYgGAxy77330r9/f5xOJz179uT3v/89AKtWrcJisVBSUhJ6rfXr12OxWNi5cycATz31FElJSbzxxhsMHToUp9NJTk4On3/+OT/84Q9JTU0lMTGRM888k3Xr1jUoV0lJCT/72c9IT0/H5XJx4okn8p///IfKykoSEhJ46aWXGhz/2muvERsbS3l5+VF/Xs2lUNIcFouGBYtIp2UYBlW+qjZfwrmJ/Y9//GOKior44IMPQtsOHDjAypUrmTlzJhUVFZx33nlkZ2fz5Zdfcs455zB16lRycnKO6jOxWq38+c9/5ttvv+Xpp5/m/fff59Zbbw3tX79+PZMmTWLo0KGsWbOGjz76iKlTpxIIBABYuHAhd999N3fccQffffcdzz33HOnp6WGVoaqqinvuuYe///3vfPvtt6SlpVFeXs7s2bP56KOP+OSTTxgwYADnnXdeKFAEg0HOPfdcVq9ezTPPPMN3333H3Xffjc1mIzY2lksuuYQnn3yywXWefPJJLr74YuLj44/qswpHVKtf4XiR3Af2fakROCLS6VT7qxn/3Pg2v+6nl31KjD2mWccmJydz7rnn8txzzzFp0iQAXnrpJVJTU/nBD36A1WplxIgRoeN/+9vf8uqrr/LGG28wb968sMt20003hdZ79+7N7373O6677jr+8pe/AHDvvfcyZsyY0HOAE044AYDy8nIefPBBHn74YWbPng1Av379OO2008Iqg8/n4y9/+UuD9zVx4sQGxzz66KMkJSXx4Ycfcv755/Pee+/x2WefsXHjRgYOHAhA3759Q8dfffXVnHLKKeTm5tKtWzcKCgp48803j6lWKRyqKWkuDQsWEWnXZs6cycsvv4zH4wHg2Wef5ZJLLsFqtVJRUcEtt9zCkCFDSEpKIi4ujo0bNx51Tcl7773HpEmTyMzMJD4+niuuuIKioiKqqsx+h7U1JY3ZuHEjHo+nyf3N5XA4GD58eINt+fn5XHPNNQwYMIDExEQSEhKoqKgIvc/169fTo0ePUCA52Lhx4zjhhBN4+umnAXjmmWfo1asXZ5xxxjGVtblUU9JcGhYsIp1UdFQ0n172aUSuG46pU6diGAYrVqxg7Nix/O9//+NPf/oTALfccgvvvvsuf/zjH+nfvz/R0dFcfPHFeL3esMu1c+dOzj//fK6//np+//vfk5KSwkcffcRPf/pTvF4vMTExREc3XfbD7QOzaQho0Hzl8/kafR2LxdJg2+zZsykqKuLBBx+kV69eOJ1OJkyYEHqfR7o2mLUly5YtY8GCBTz55JPMmTPnkOu0FoWS5krRrK4i0jlZLJZmN6NEksvl4sILL+TZZ59l69atDBo0iFGjRgFmp9Mrr7ySCy64AICKiopQp9FwrV27lmAwyP333x8KEP/6178aHDN8+HCys7O56667Djl/wIABREdHk52dzdVXX33I/q5dzfut5ebmkpycDJg1HM2xevVq/vKXv3DeeecBsHv3bgoLCxuUa8+ePXz//fdN1pZcfvnl3Hrrrfz5z3/mu+++CzUxtQU13zRXbU1J6W7wh5+sRUSk9c2cOZMVK1bwxBNPMHPmzND2AQMG8Morr7B+/Xq++uorLrvssqMeQtu/f398Ph8PPfQQ27dv55///CePPPJIg2MWLlzI559/zg033MDXX3/Npk2b+Otf/0phYSEul4vbbruNW2+9lX/84x9s27aNTz75hMcffzz0+llZWdx5551s2bKFFStWcP/99zerbAMGDOCf//wnGzdu5NNPP2XmzJkNakfOPPNMzjjjDC666CLeffddduzYwVtvvcXKlStDxyQnJ3PhhRfyq1/9irPPPpsePXoc1ed0NBRKmisuHewxYASh5OjaIEVEpHVNnDiRlJQUNm/ezGWXXRba/sADD5CcnMwpp5zC1KlTmTJlSqgWJVwjRozggQce4J577uHEE0/k2WefZcmSJQ2OGThwIO+88w5fffUV48aNY8KECbz++utERZkNFHfccQe//OUvWbRoEUOGDGHGjBkUFBQAYLfbef7559m0aRPDhw/nnnvu4Xe/+12zyvb4449TXFzMqFGjuOKKK/j5z39OWlpag2Nefvllxo4dy6WXXsrQoUO59dZbQ6OCatU2RV111VVH9RkdLYsRzpirCCkrKyMxMZHS0lISEhIiV5C/nAIF38LMl2DADyNXDhGRVuJ2u9mxYwd9+vTB5XJFujgSIf/85z+5+eab2bdvHw6H47DHHu47E+7vt2pKwqF+JSIichyrqqpi27Zt3H333fzsZz87YiBpaQol4dCwYBGR496zzz5LXFxco0vtXCPHq3vvvZfBgweTkZHBwoUL2/z6Gn0TDg0LFhE57v3f//0f48c3Plmc3W5v49K0rTvvvJM777wzYtdXKAmHmm9ERI578fHxbTKluhxKzTfhCN3/ZicEA4c9VERERMKjUBKOhEywOSDog7K9kS6NiIjIcUWhJBxWGyT1MtfVhCMiItKiFErCpRE4IiIirUKhJFwKJSIiIq1CoSRcoRE4GhYsInI86d27N0uXLm3WsRaLhddee61Vy9MZKZSES3OViIiItAqFknCFhgXvgPZ/2yAREZEOQ6EkXIlZYLGBrwoq8iNdGhERAR599FG6d+9OMBhssH3atGlcddVVbNu2jWnTppGenk5cXBxjx47lvffea7Hrf/PNN0ycOJHo6Gi6dOnCtddeS0VFRWj/qlWrGDduHLGxsSQlJXHqqaeya9cuAL766it+8IMfEB8fT0JCAqNHj+aLL75osbJ1JJ06lBheL+XvfxDeSVEOSOxhrquzq4h0AoZhEKyqavMlnJvY//jHP6aoqIgP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DObNm8err77K+++/T58+fRrsHz16NHa7vcF3bfPmzeTk5HTq79qRPrfGrF+/HqBTf98aEwwG8Xg8Lftda9m+uB3HCy+8YDidTuOpp54yvvvuO+Paa681kpKSjLy8vEgXrd365S9/aaxatcrYsWOHsXr1amPy5MlGamqqUVBQEOmitSvl5eXGl19+aXz55ZcGYDzwwAPGl19+aezatcswDMO4++67jaSkJOP11183vv76a2PatGlGnz59jOrq6giXPHIO95mVl5cbt9xyi7FmzRpjx44dxnvvvWeMGjXKGDBggOF2uyNd9Ii5/vrrjcTERGPVqlVGbm5uaKmqqgodc9111xk9e/Y03n//feOLL74wJkyYYEyYMCGCpY68I31uW7duNX7zm98YX3zxhbFjxw7j9ddfN/r27WucccYZES55ZC1YsMD48MMPjR07dhhff/21sWDBAsNisRjvvPOOYRgt913rtKHEMAzjoYceMnr27Gk4HA5j3LhxxieffBLpIrVrM2bMMLp162Y4HA4jMzPTmDFjhrF169ZIF6vd+eCDDwzgkGX27NmGYZjDgu+44w4jPT3dcDqdxqRJk4zNmzdHttARdrjPrKqqyjj77LONrl27Gna73ejVq5dxzTXXdPo/IBr7vADjySefDB1TXV1t3HDDDUZycrIRExNjXHDBBUZubm7kCt0OHOlzy8nJMc444wwjJSXFcDqdRv/+/Y1f/epXRmlpaWQLHmFXXXWV0atXL8PhcBhdu3Y1Jk2aFAokhtFy3zWLYRjGUdbciIiIiLSYTtmnRERERNofhRIRERFpFxRKREREpF1QKBEREZF2QaFERERE2gWFEhEREWkXFEpERESkXVAoERERkXZBoURERETaBYUSERERaRcUSkRERKRdUCgRERGRduH/A/hvBD+UpORaAAAAAElFTkSuQmCC",
+ "text/plain": [
+ "<Figure size 640x480 with 1 Axes>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "pd.DataFrame(history.history).plot()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 858us/step - accuracy: 0.8790 - loss: 0.3375\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "[0.33449822664260864, 0.8787999749183655]"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model.evaluate(X_test, y_test)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 40ms/step\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "array([[0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0.05, 0. , 0.94]],\n",
+ " dtype=float32)"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_new = X_test[:1]\n",
+ "y_proba = model.predict(X_new)\n",
+ "y_proba.round(2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([9])"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "y_pred = y_proba.argmax(axis=-1) # Find the highest value and get the index\n",
+ "y_pred"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "notebook",
+ "language": "python",
+ "name": "notebook"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/housingPricePredictions/MLPHousingKeras.ipynb b/housingPricePredictions/MLPHousingKeras.ipynb
@@ -0,0 +1,301 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.datasets import fetch_california_housing\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "housing = fetch_california_housing()\n",
+ "\n",
+ "# Split train, validation, and test (in that order).\n",
+ "X_train_full, X_test, y_train_full, y_test = train_test_split(housing.data,housing.target,random_state=10)\n",
+ "X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full, random_state=10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2024-06-11 07:03:53.306268: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n",
+ "2024-06-11 07:03:53.309533: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n",
+ "2024-06-11 07:03:53.351612: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
+ "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+ "2024-06-11 07:03:54.094326: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n",
+ "/home/andrew/gitRepos/myvenv/lib/python3.11/site-packages/keras/src/layers/preprocessing/normalization.py:99: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
+ " super().__init__(**kwargs)\n",
+ "2024-06-11 07:03:54.745587: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
+ "2024-06-11 07:03:54.746044: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2251] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n",
+ "Skipping registering GPU devices...\n"
+ ]
+ }
+ ],
+ "source": [
+ "import tensorflow as tf\n",
+ "norm_layer = tf.keras.layers.Normalization(input_shape=X_train.shape[1:])\n",
+ "tf.random.set_seed(10)\n",
+ "model = tf.keras.Sequential([\n",
+ " norm_layer,\n",
+ " tf.keras.layers.Dense(50, activation='relu'),\n",
+ " tf.keras.layers.Dense(50, activation='relu'),\n",
+ " tf.keras.layers.Dense(50, activation='relu'),\n",
+ " tf.keras.layers.Dense(1)\n",
+ "])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1mModel: \"sequential\"\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+ "┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
+ "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+ "│ normalization (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Normalization</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">17</span> │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">450</span> │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">2,550</span> │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">2,550</span> │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">51</span> │\n",
+ "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+ "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
+ "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+ "│ normalization (\u001b[38;5;33mNormalization\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m17\u001b[0m │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) │ \u001b[38;5;34m450\u001b[0m │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) │ \u001b[38;5;34m2,550\u001b[0m │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) │ \u001b[38;5;34m2,550\u001b[0m │\n",
+ "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+ "│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m51\u001b[0m │\n",
+ "└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,618</span> (21.95 KB)\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m5,618\u001b[0m (21.95 KB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,601</span> (21.88 KB)\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m5,601\u001b[0m (21.88 KB)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">17</span> (72.00 B)\n",
+ "</pre>\n"
+ ],
+ "text/plain": [
+ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m17\u001b[0m (72.00 B)\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "model.summary()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)\n",
+ "model.compile(loss='mse', optimizer=optimizer, metrics=['RootMeanSquaredError'])\n",
+ "norm_layer.adapt(X_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 1/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - RootMeanSquaredError: 1.2797 - loss: 1.7474 - val_RootMeanSquaredError: 0.6666 - val_loss: 0.4444\n",
+ "Epoch 2/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 988us/step - RootMeanSquaredError: 0.6317 - loss: 0.3996 - val_RootMeanSquaredError: 0.6262 - val_loss: 0.3921\n",
+ "Epoch 3/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 932us/step - RootMeanSquaredError: 0.6012 - loss: 0.3618 - val_RootMeanSquaredError: 0.6135 - val_loss: 0.3764\n",
+ "Epoch 4/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step - RootMeanSquaredError: 0.5898 - loss: 0.3483 - val_RootMeanSquaredError: 0.6002 - val_loss: 0.3602\n",
+ "Epoch 5/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5737 - loss: 0.3295 - val_RootMeanSquaredError: 0.5929 - val_loss: 0.3516\n",
+ "Epoch 6/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 944us/step - RootMeanSquaredError: 0.5647 - loss: 0.3192 - val_RootMeanSquaredError: 0.5876 - val_loss: 0.3453\n",
+ "Epoch 7/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 969us/step - RootMeanSquaredError: 0.5633 - loss: 0.3178 - val_RootMeanSquaredError: 0.5853 - val_loss: 0.3425\n",
+ "Epoch 8/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5551 - loss: 0.3085 - val_RootMeanSquaredError: 0.5816 - val_loss: 0.3383\n",
+ "Epoch 9/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 922us/step - RootMeanSquaredError: 0.5500 - loss: 0.3028 - val_RootMeanSquaredError: 0.5773 - val_loss: 0.3332\n",
+ "Epoch 10/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5433 - loss: 0.2954 - val_RootMeanSquaredError: 0.5755 - val_loss: 0.3312\n",
+ "Epoch 11/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5386 - loss: 0.2904 - val_RootMeanSquaredError: 0.5712 - val_loss: 0.3263\n",
+ "Epoch 12/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5350 - loss: 0.2864 - val_RootMeanSquaredError: 0.5696 - val_loss: 0.3244\n",
+ "Epoch 13/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 950us/step - RootMeanSquaredError: 0.5329 - loss: 0.2842 - val_RootMeanSquaredError: 0.5701 - val_loss: 0.3250\n",
+ "Epoch 14/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 926us/step - RootMeanSquaredError: 0.5335 - loss: 0.2849 - val_RootMeanSquaredError: 0.5706 - val_loss: 0.3256\n",
+ "Epoch 15/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5288 - loss: 0.2798 - val_RootMeanSquaredError: 0.5681 - val_loss: 0.3227\n",
+ "Epoch 16/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 952us/step - RootMeanSquaredError: 0.5263 - loss: 0.2772 - val_RootMeanSquaredError: 0.5674 - val_loss: 0.3220\n",
+ "Epoch 17/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5243 - loss: 0.2751 - val_RootMeanSquaredError: 0.5638 - val_loss: 0.3179\n",
+ "Epoch 18/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - RootMeanSquaredError: 0.5240 - loss: 0.2748 - val_RootMeanSquaredError: 0.5647 - val_loss: 0.3189\n",
+ "Epoch 19/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5233 - loss: 0.2741 - val_RootMeanSquaredError: 0.5676 - val_loss: 0.3221\n",
+ "Epoch 20/20\n",
+ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 960us/step - RootMeanSquaredError: 0.5226 - loss: 0.2733 - val_RootMeanSquaredError: 0.5658 - val_loss: 0.3202\n"
+ ]
+ }
+ ],
+ "source": [
+ "history = model.fit(X_train, y_train, epochs=20,\n",
+ " validation_data=(X_valid,y_valid))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "<Axes: >"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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QGF3/bdRaaWfhdogza+jCal8rfb8nOTXBs+63jLP+vJrz37UhsrQIE8geM4zB885oKTKa/N56cowZ0XdMx4rNZ6ZjauElaEza58PqBkxjBARUfAp1YA+PNi1aN3qM4Ggw+o707H5grBiPi9dYeWyewYzn67cts/1DCNERETUSGqddAftyK41r+NyVAksVUJKbds0M4YRIiKijkSp9ly23TnYNZG1ntErRERE1CExjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVC1ibv2iqIIADCbzUGuCREREdWX93vb+z1ekzYRRkpLSwEAycnJQa4JERERBaq0tBRhYWE1LhfEuuJKK+B2u3H+/HmEhoZCEIQm26/ZbEZycjLOnDkDk8nUZPttrTrS+fJc26+OdL481/aro5yvKIooLS1FYmIiFIqaR4a0iZYRhUKBTp06Ndv+TSZTu/5luFBHOl+ea/vVkc6X59p+dYTzra1FxIsDWImIiCioGEaIiIgoqDp0GNFqtVi8eDG0Wm2wq9IiOtL58lzbr450vjzX9qujnW9d2sQAViIiImq/OnTLCBEREQUfwwgREREFFcMIERERBRXDCBEREQVVuw8jy5cvR0pKCnQ6HUaOHIk9e/bUuv7nn3+O3r17Q6fTYcCAAdiwYUML1bRxlixZguHDhyM0NBSxsbGYPHky0tPTa91mzZo1EATB56HT6Vqoxg335JNPVqt37969a92mrX6uKSkp1c5VEATMnTvX7/pt7TP93//+h4kTJyIxMRGCIODLL7/0WS6KIhYtWoSEhATo9XqMHTsWx44dq3O/gf7dt4TaztXhcODRRx/FgAEDYDQakZiYiOnTp+P8+fO17rMhfwstoa7PdebMmdXqPW7cuDr32xo/V6Du8/X3NywIAl566aUa99laP9vm0q7DyGeffYYFCxZg8eLF2LdvHwYOHIi0tDTk5ub6XX/Hjh245ZZbcOedd+LXX3/F5MmTMXnyZBw8eLCFax64H3/8EXPnzsWuXbuwefNmOBwOXHPNNSgvL691O5PJhKysLPlx+vTpFqpx4/Tr18+n3tu2batx3bb8uf78888+57l582YAwE033VTjNm3pMy0vL8fAgQOxfPlyv8v/+c9/4rXXXsPKlSuxe/duGI1GpKWlwWq11rjPQP/uW0pt52qxWLBv3z488cQT2LdvH9auXYv09HRcf/31de43kL+FllLX5woA48aN86n3J598Uus+W+vnCtR9vlXPMysrC6tWrYIgCLjxxhtr3W9r/GybjdiOjRgxQpw7d6783uVyiYmJieKSJUv8rn/zzTeL1157rU/ZyJEjxb/+9a/NWs/mkJubKwIQf/zxxxrXWb16tRgWFtZylWoiixcvFgcOHFjv9dvT5/rAAw+I3bt3F91ut9/lbfUzFUVRBCB+8cUX8nu32y3Gx8eLL730klxWXFwsarVa8ZNPPqlxP4H+3QfDhefqz549e0QA4unTp2tcJ9C/hWDwd64zZswQJ02aFNB+2sLnKor1+2wnTZokXnXVVbWu0xY+26bUbltG7HY79u7di7Fjx8plCoUCY8eOxc6dO/1us3PnTp/1ASAtLa3G9VuzkpISAEBkZGSt65WVlaFLly5ITk7GpEmTcOjQoZaoXqMdO3YMiYmJ6NatG6ZNm4bMzMwa120vn6vdbseHH36IO+64o9YbRrbVz/RCGRkZyM7O9vnswsLCMHLkyBo/u4b83bdWJSUlEAQB4eHhta4XyN9Ca7J161bExsYiNTUV9957LwoKCmpctz19rjk5OVi/fj3uvPPOOtdtq59tQ7TbMJKfnw+Xy4W4uDif8ri4OGRnZ/vdJjs7O6D1Wyu324358+djzJgx6N+/f43rpaamYtWqVVi3bh0+/PBDuN1ujB49GmfPnm3B2gZu5MiRWLNmDTZu3IgVK1YgIyMDl156KUpLS/2u314+1y+//BLFxcWYOXNmjeu01c/UH+/nE8hn15C/+9bIarXi0UcfxS233FLrTdQC/VtoLcaNG4f3338fW7ZswYsvvogff/wR48ePh8vl8rt+e/lcAeC9995DaGgopkyZUut6bfWzbag2cddeCszcuXNx8ODBOvsXR40ahVGjRsnvR48ejT59+uCtt97CM88809zVbLDx48fLry+66CKMHDkSXbp0wX/+8596/W+jrXr33Xcxfvx4JCYm1rhOW/1MqZLD4cDNN98MURSxYsWKWtdtq38Lf/nLX+TXAwYMwEUXXYTu3btj69atuPrqq4NYs+a3atUqTJs2rc6B5W31s22odtsyEh0dDaVSiZycHJ/ynJwcxMfH+90mPj4+oPVbo3nz5uHrr7/GDz/8gE6dOgW0rVqtxuDBg3H8+PFmql3zCA8PR69evWqsd3v4XE+fPo3vvvsOd911V0DbtdXPFID8+QTy2TXk77418QaR06dPY/PmzQHfWr6uv4XWqlu3boiOjq6x3m39c/X66aefkJ6eHvDfMdB2P9v6ardhRKPRYOjQodiyZYtc5na7sWXLFp//OVY1atQon/UBYPPmzTWu35qIooh58+bhiy++wPfff4+uXbsGvA+Xy4Xff/8dCQkJzVDD5lNWVoYTJ07UWO+2/Ll6rV69GrGxsbj22msD2q6tfqYA0LVrV8THx/t8dmazGbt3767xs2vI331r4Q0ix44dw3fffYeoqKiA91HX30JrdfbsWRQUFNRY77b8uVb17rvvYujQoRg4cGDA27bVz7begj2Ctjl9+umnolarFdesWSMePnxYvPvuu8Xw8HAxOztbFEVRvP3228W///3v8vrbt28XVSqV+PLLL4tHjhwRFy9eLKrVavH3338P1inU27333iuGhYWJW7duFbOysuSHxWKR17nwfJ966ilx06ZN4okTJ8S9e/eKf/nLX0SdTiceOnQoGKdQbw8++KC4detWMSMjQ9y+fbs4duxYMTo6WszNzRVFsX19rqIoXTXQuXNn8dFHH622rK1/pqWlpeKvv/4q/vrrryIAcenSpeKvv/4qX0HywgsviOHh4eK6devE3377TZw0aZLYtWtXsaKiQt7HVVddJb7++uvy+7r+7oOltnO12+3i9ddfL3bq1Encv3+/z9+wzWaT93Hhudb1txAstZ1raWmp+NBDD4k7d+4UMzIyxO+++04cMmSI2LNnT9Fqtcr7aCufqyjW/XssiqJYUlIiGgwGccWKFX730VY+2+bSrsOIKIri66+/Lnbu3FnUaDTiiBEjxF27dsnLLr/8cnHGjBk+6//nP/8Re/XqJWo0GrFfv37i+vXrW7jGDQPA72P16tXyOhee7/z58+WfTVxcnDhhwgRx3759LV/5AE2dOlVMSEgQNRqNmJSUJE6dOlU8fvy4vLw9fa6iKIqbNm0SAYjp6enVlrX1z/SHH37w+3vrPSe32y0+8cQTYlxcnKjVasWrr7662s+hS5cu4uLFi33Kavu7D5bazjUjI6PGv+EffvhB3seF51rX30Kw1HauFotFvOaaa8SYmBhRrVaLXbp0EWfPnl0tVLSVz1UU6/49FkVRfOutt0S9Xi8WFxf73Udb+WybiyCKotisTS9EREREtWi3Y0aIiIiobWAYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKg+v+8VzGYSNy1wgAAAABJRU5ErkJggg==",
+ "text/plain": [
+ "<Figure size 640x480 with 1 Axes>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "pd.DataFrame(history.history).plot()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step\n",
+ "72.50016054455384\n"
+ ]
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "y_pred = model.predict(X_test)\n",
+ "\n",
+ "residuals = y_test - y_pred\n",
+ "\n",
+ "percent_off = np.abs(residuals) / y_test * 100\n",
+ "\n",
+ "print(percent_off.mean())"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "notebook",
+ "language": "python",
+ "name": "notebook"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/housingPricePredictions/MLPHousing.ipynb b/housingPricePredictions/MLPHousingSciKitLearn.ipynb