{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fitting a straight line using Feed Forward Neural Network" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Define the Linear Regression Model\n", "class LinearRegressionModel(nn.Module):\n", " def __init__(self, input_dim, output_dim):\n", " super(LinearRegressionModel, self).__init__()\n", " self.linear = nn.Linear(input_dim, output_dim)\n", " \n", " def forward(self, x):\n", " return self.linear(x)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Generate dummy data\n", "torch.manual_seed(42)\n", "X = torch.randn(100, 1)\n", "y = 3 * X + 2 + 0.1 * torch.randn(100, 1) # y = 3x + 2 with noise" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Initialize model, loss function, and optimizer\n", "model = LinearRegressionModel(input_dim=1, output_dim=1)\n", "criterion = nn.MSELoss()\n", "optimizer = optim.SGD(model.parameters(), lr=0.01)\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch [100/1000], Loss: 0.1429\n", "Epoch [200/1000], Loss: 0.0102\n", "Epoch [300/1000], Loss: 0.0078\n", "Epoch [400/1000], Loss: 0.0078\n", "Epoch [500/1000], Loss: 0.0078\n", "Epoch [600/1000], Loss: 0.0078\n", "Epoch [700/1000], Loss: 0.0078\n", "Epoch [800/1000], Loss: 0.0078\n", "Epoch [900/1000], Loss: 0.0078\n", "Epoch [1000/1000], Loss: 0.0078\n" ] } ], "source": [ "# Training loop\n", "epochs = 1000\n", "for epoch in range(epochs):\n", " optimizer.zero_grad()\n", " outputs = model(X)\n", " loss = criterion(outputs, y)\n", " loss.backward()\n", " optimizer.step()\n", " if (epoch + 1) % 100 == 0:\n", " print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "linear.weight: tensor([[3.0012]])\n", "linear.bias: tensor([2.0036])\n" ] } ], "source": [ "# Print final parameters\n", "for name, param in model.named_parameters():\n", " print(f'{name}: {param.data}')\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Plot data, predictions, and learned parameters\n", "with torch.no_grad():\n", " predicted = model(X)\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(X.numpy(), y.numpy(), label='Original Data')\n", "plt.plot(X.numpy(), predicted.numpy(), color='red', label='Fitted Line')\n", "plt.legend()\n", "plt.xlabel('X')\n", "plt.ylabel('y')\n", "plt.title('Linear Regression Fit')\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "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.11" } }, "nbformat": 4, "nbformat_minor": 4 }