{ "cells": [ { "cell_type": "code", "execution_count": 4, "id": "4d62143b-6a33-4c02-8b1d-3d48d1256737", "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import fetch_california_housing\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "\n", "import numpy as np\n", "import tensorflow as tf\n", "from tensorflow import keras\n", "import pandas as pd\n", "import matplotlib\n", "matplotlib.use(\"TkAgg\")\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 14, "id": "d77530d4-e76b-4958-961e-a08bb19a7977", "metadata": {}, "outputs": [], "source": [ "housing = fetch_california_housing()\n", "x_train_full, x_test, y_train_full, y_test = train_test_split(housing.data,housing.target)\n", "x_train, x_valid, y_train, y_valid = train_test_split(x_train_full, y_train_full)\n", "\n", "scaler=StandardScaler()\n", "x_train = scaler.fit_transform(x_train)\n", "x_valid = scaler.transform(x_valid)\n", "x_test=scaler.transform(x_test)" ] }, { "cell_type": "code", "execution_count": null, "id": "55bd5b4b-8f34-4ade-89b3-35cfcbe61d7d", "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([keras.layers.Dense(30, activation = \"relu\", input_shape=x_train.shape[1:]), keras.layers.Dense(1)])\n" ] }, { "cell_type": "code", "execution_count": null, "id": "736db746-f0b9-4a4b-b90f-6ae3cda03447", "metadata": { "scrolled": true }, "outputs": [], "source": [ "input_ = keras.layers.Input(shape=x_train.shape[1:])\n", "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", "concat = keras.layers.Concatenate()([input_,hidden2])\n", "output = keras.layers.Dense(1)(concat)\n", "model = keras.Model(inputs=[input_], outputs=[output])\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "af7e711e-d8df-44d6-bf50-70ee09ee2ae6", "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 3ms/step - loss: 1.7751 - val_loss: 1.3058\n", "Epoch 2/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.8318 - val_loss: 0.8696\n", "Epoch 3/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.7257 - val_loss: 0.7567\n", "Epoch 4/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.6701 - val_loss: 0.6548\n", "Epoch 5/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.6205 - val_loss: 0.6165\n", "Epoch 6/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5843 - val_loss: 0.5791\n", "Epoch 7/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5507 - val_loss: 0.5629\n", "Epoch 8/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5270 - val_loss: 0.5499\n", "Epoch 9/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5061 - val_loss: 0.5127\n", "Epoch 10/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4899 - val_loss: 0.4930\n", "Epoch 11/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4746 - val_loss: 0.4816\n", "Epoch 12/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4634 - val_loss: 0.4685\n", "Epoch 13/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4539 - val_loss: 0.4632\n", "Epoch 14/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4478 - val_loss: 0.4546\n", "Epoch 15/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4418 - val_loss: 0.4485\n", "Epoch 16/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4374 - val_loss: 0.4442\n", "Epoch 17/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4337 - val_loss: 0.4400\n", "Epoch 18/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4304 - val_loss: 0.4377\n", "Epoch 19/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4274 - val_loss: 0.4378\n", "Epoch 20/20\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4257 - val_loss: 0.4346\n", "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - loss: 0.4405\n", "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 108ms/step\n", "[[1.3971645]\n", " [3.2480707]\n", " [2.94071 ]]\n" ] } ], "source": [ "x_train_A, x_train_B = x_train[:, :5], x_train[:, 5:]\n", "x_valid_A, x_valid_B = x_valid[:, :5], x_valid[:, 5:]\n", "x_test_A, x_test_B = x_test[:, :5], x_test[:, 5:]\n", "x_new_A, x_new_B = x_test_A[:3], x_test_B[:3]\n", "\n", "# Construir modelo\n", "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", "input_B = keras.layers.Input(shape=[3], name=\"deep_input\")\n", "\n", "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", "\n", "concat = keras.layers.Concatenate()([input_A, hidden2])\n", "output = keras.layers.Dense(1, name=\"output\")(concat)\n", "\n", "model = keras.Model(inputs=[input_A, input_B], outputs=[output])\n", "\n", "# Compilar\n", "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "\n", "# Treinar\n", "history = model.fit(\n", " (x_train_A, x_train_B), y_train,\n", " epochs=20,\n", " validation_data=((x_valid_A, x_valid_B), y_valid)\n", ")\n", "\n", "# Avaliar\n", "mse_test = model.evaluate((x_test_A, x_test_B), y_test)\n", "\n", "# Predizer\n", "y_pred = model.predict((x_new_A, x_new_B))\n", "print(y_pred)" ] }, { "cell_type": "code", "execution_count": null, "id": "7835c49d-10bf-44cb-a90b-1cb808ce0be7", "metadata": {}, "outputs": [], "source": [ "model.compile(loss=\"mean_squared_error\", optimizer=\"adam\")\n", "history = model.fit(x_train, y_train, epochs=20, validation_data=(x_valid, y_valid))\n", "mse_test = model.evaluate(x_test, y_test)\n", "\n", "x_new = x_test[:3]\n", "y_pred = model.predict(x_new)\n", "\n", "print(y_pred)" ] }, { "cell_type": "code", "execution_count": null, "id": "f052ffc0-841f-4044-a40d-7c57216e0dc6", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.10" } }, "nbformat": 4, "nbformat_minor": 5 }