Row 99716
Content Data
This page contains data entry 99716 from the Axioma AXP content repository. The structured data below represents the complete record for this entry.
import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') class ImprovedNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(ImprovedNN, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.leaky_relu1 = nn.LeakyReLU() self.fc2 = nn.Linear(hidden_size, hidden_size) self.leaky_relu2 = nn.LeakyReLU() self.fc3 = nn.Linear(hidden_size, output_size) self._initialize_weights() def forward(self, x): x = self.fc1(x) x = self.leaky_relu1(x) x = self.fc2(x) x = self.leaky_relu2(x) x = self.fc3(x) return x def _initialize_weights(self): for m in self.modules(): if isinstance(m, nn.Linear): nn.init.kaiming_normal_(m.weight) nn.init.zeros_(m.bias) def save_model(model, filepath): torch.save(model.state_dict(), filepath) def load_model(model, filepath): model.load_state_dict(torch.load(filepath)) model.eval() def train_model(model, train_loader, val_loader, epochs=1000, initial_lr=0.05, save_path='improved_nn.pth'): model.to(device) criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=initial_lr) best_val_loss = float('inf') for epoch in range(epochs): model.train() epoch_loss = 0.0 for data, targets in train_loader: data, targets = data.to(device), targets.to(device) optimizer.zero_grad() outputs = model(data) loss = criterion(outputs, targets) loss.backward() optimizer.step() epoch_loss += loss.item() epoch_loss /= len(train_loader) if (epoch + 1) % 100 == 0 or epoch_loss < best_val_loss: model.eval() val_loss = 0.0 with torch.no_grad(): for val_data, val_targets in val_loader: val_data, val_targets = val_data.to(device), val_targets.to(device) val_outputs = model(val_data) val_loss += criterion(val_outputs, val_targets).item() val_loss /= len(val_loader) print(f'Epoch [{epoch+1}/{epochs}], Training Loss: {epoch_loss:.8f}, Validation Loss: {val_loss:.8f}') if val_loss < best_val_loss: best_val_loss = val_loss print('Training set predictions:') with torch.no_grad(): for data, targets in train_loader: data, targets = data.to(device), targets.to(device) train_predictions = model(data) for i in range(data.size(0)): input_str = ', '.join(f"{x:.2f}".rstrip('0').rstrip('.') for x in data[i].tolist()) target_str = f"{targets[i].item():.4f}".rstrip('0').rstrip('.') prediction_str = f"{train_predictions[i].item():.4f}".rstrip('0').rstrip('.') loss_str = f"{criterion(train_predictions[i], targets[i]).item():.8f}" print(f'Input: [{input_str}], Target: {target_str}, Prediction: {prediction_str}, Loss: {loss_str}') print('Validation set predictions:') for val_data, val_targets in val_loader: val_data, val_targets = val_data.to(device), val_targets.to(device) val_predictions = model(val_data) for i in range(val_data.size(0)): input_str = ', '.join(f"{x:.2f}".rstrip('0').rstrip('.') for x in val_data[i].tolist()) target_str = f"{val_targets[i].item():.4f}".rstrip('0').rstrip('.') prediction_str = f"{val_predictions[i].item():.4f}".rstrip('0').rstrip('.') loss_str = f"{criterion(val_predictions[i], val_targets[i]).item():.8f}" print(f'Input: [{input_str}], Target: {target_str}, Prediction: {prediction_str}, Loss: {loss_str}') save_model(model, save_path) load_model(model, save_path) return model if __name__ == "__main__": input_size = 2 hidden_size = 2 output_size = 1 initial_lr = 0.05 epochs = 1000 model_filepath = 'improved_nn.pth' batch_size = 16 x_train = torch.tensor([ [1.0, 2.0], [2.0, 3.0], [3.0, 4.0], [-5.0, 6.0], [-2.56, 6.0], [4.0, 5.0], [10.0, 11.0], [15.5, 16.5], [-20.0, -30.0], [25.75, 26.25], [-35.5, 40.5], [45.0, 46.0], [50.0, -60.0], [-70.0, 80.0], [90.1, 100.2], [110.3, -120.4], [-130.5, 140.6], [150.7, 160.8], [170.9, -180.1], [190.2, 200.3], [-210.4, 220.5], [230.6, -240.7], [-250.8, 260.9], [270.1, 280.2], [290.3, -300.4], [-310.5, 320.6], [330.7, 340.8], [350.9, -360.1], [370.2, 380.3], [-390.4, 400.5], [410.6, -420.7], [-430.8, 440.9], [450.1, 460.2], [470.3, -480.4], [-490.5, 500.6], [510.7, 520.8], [530.9, -540.1], [550.2, 560.3], [-570.4, 580.5], [590.6, -600.7], [-610.8, 620.9], [630.1, 640.2], [650.3, -660.4], [-670.5, 680.6], [690.7, 700.8], [710.9, -720.1], [730.2, 740.3], [-750.4, 760.5], [770.6, -780.7], [-790.8, 800.9], [810.1, 820.2], [830.3, -840.4], [-850.5, 860.6], [870.7, 880.8] ], dtype=torch.float32) y_train = torch.tensor([ [3.0], [5.0], [7.0], [1.0], [3.44], [9.0], [21.0], [32.0], [-50.0], [52.0], [5.0], [91.0], [-10.0], [10.0], [190.3], [-10.1], [10.1], [311.5], [-9.2], [390.5], [10.1], [-10.1], [10.1], [550.3], [-10.1], [330.2], [671.5], [-10.1], [540.5], [10.1], [-10.1], [871.5], [911.5], [-10.1], [110.1], [990.3], [-10.1], [220.3], [5.0], [-10.1], [540.3], [1100.5], [-10.1], [331.2], [450.2], [-10.1], [550.3], [620.5], [-10.1], [770.5], [810.1], [-10.1], [220.3], [550.3] ], dtype=torch.float32) x_val = torch.tensor([ [5.0, 6.0], [6.0, 7.0], [8.5, 9.5], [-10.5, 11.5], [-12.5, 13.5], [14.5, 15.5], [16.5, 17.5], [-18.5, 19.5], [20.5, 21.5], [-22.5, 23.5], [24.5, 25.5], [-26.5, 27.5] ], dtype=torch.float32) y_val = torch.tensor([ [11.0], [13.0], [18.0], [1.0], [1.0], [30.0], [34.0], [1.0], [42.0], [1.0], [50.0], [1.0] ], dtype=torch.float32) train_dataset = TensorDataset(x_train, y_train) train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) val_dataset = TensorDataset(x_val, y_val) val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False) model = ImprovedNN(input_size, hidden_size, output_size).to(device) try: load_model(model, model_filepath) print(f'Model loaded from {model_filepath}') except (FileNotFoundError, RuntimeError): print(f'No compatible saved model found at {model_filepath}. Training a new model.') model = train_model(model, train_loader, val_loader, epochs=epochs, initial_lr=initial_lr, save_path=model_filepath) save_model(model, model_filepath) print(f'Model saved to {model_filepath}') load_model(model, model_filepath) print(f'Model loaded from {model_filepath}') test_data = torch.tensor([[10.0, 20.0], [30.0, 40.0]], dtype=torch.float32) test_data = test_data.to(device) predictions = model(test_data) predictions_formatted = [f"{p[0]:.4f}".rstrip('0').rstrip('.') for p in predictions.tolist()] print(f'Predictions: {predictions_formatted}')
I'm using Visual Studio Code. Python 3.10.8.
You'd expect with this trainingdata that it can do it within 1k epochs. Even within less. But no, it can't even do it within 50k?!
I don't know what is wrong, so please help me! Im tired af.
Please do not reply with anything like "It's just addition, why do you need a neural network for that??" as this is just an experiment and I will teach it to do other things as well.
| Field | Value |
|---|---|
| text | import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') class ImprovedNN(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(ImprovedNN, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.leaky_relu1 = nn.LeakyReLU() self.fc2 = nn.Linear(hid… |
| label | r/pytorch |
| dataType | post |
| communityName | r/pytorch |
| datetime | 2024-05-25 |
| username_encoded | Z0FBQUFBQm5Lak14VlJySFJFa01JMkxyQTA3Y1J4eFJGWC1vcHA5UkduQmljUzZnTHNiWXZGYU5CZ3hXejYxRUZmWElNV3dSVDlxelMwbndnMGxndV85UGI0NlU2V29DU1E9PQ== |
| url_encoded | Z0FBQUFBQm5LalBDaVNrN2R4OU9rNjQtdVRvelFhRHhUeGgyZkt5amZ2XzVtYXpEUWlCbm51ZkJpR1NidHpxTnBqMUZZMnFVYkZpSXktZUV3Q0E5Z3h0X3RBNklBcm8yNmNhc19SUEt3dUZQODlqalRMSm9KSGJqM0Z5TC1wbDAzN1FtTDVLMEhDRUM3MTd3b25UX0dudEZYLXRyM0xDSmVoLTVRRWgtWDhrb3NFeXpXNHZPLTNjcmtLUG51S01MaS05YnNXanRyaVhz |
Raw Record
{
"text": " import torch\n import torch.nn as nn\n import torch.optim as optim\n from torch.utils.data import DataLoader, TensorDataset\n \n device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n \n class ImprovedNN(nn.Module):\n def __init__(self, input_size, hidden_size, output_size):\n super(ImprovedNN, self).__init__()\n self.fc1 = nn.Linear(input_size, hidden_size)\n self.leaky_relu1 = nn.LeakyReLU()\n self.fc2 = nn.Linear(hidden_size, hidden_size)\n self.leaky_relu2 = nn.LeakyReLU()\n self.fc3 = nn.Linear(hidden_size, output_size)\n self._initialize_weights()\n \n def forward(self, x):\n x = self.fc1(x)\n x = self.leaky_relu1(x)\n x = self.fc2(x)\n x = self.leaky_relu2(x)\n x = self.fc3(x)\n return x\n \n def _initialize_weights(self):\n for m in self.modules():\n if isinstance(m, nn.Linear):\n nn.init.kaiming_normal_(m.weight)\n nn.init.zeros_(m.bias)\n \n \n def save_model(model, filepath):\n torch.save(model.state_dict(), filepath)\n \n \n def load_model(model, filepath):\n model.load_state_dict(torch.load(filepath))\n model.eval()\n \n \n def train_model(model, train_loader, val_loader, epochs=1000, initial_lr=0.05, save_path='improved_nn.pth'):\n model.to(device)\n criterion = nn.MSELoss()\n optimizer = optim.Adam(model.parameters(), lr=initial_lr)\n \n best_val_loss = float('inf')\n \n for epoch in range(epochs):\n model.train()\n epoch_loss = 0.0\n for data, targets in train_loader:\n data, targets = data.to(device), targets.to(device)\n optimizer.zero_grad()\n outputs = model(data)\n loss = criterion(outputs, targets)\n loss.backward()\n optimizer.step()\n epoch_loss += loss.item()\n \n epoch_loss /= len(train_loader)\n \n if (epoch + 1) % 100 == 0 or epoch_loss < best_val_loss:\n model.eval()\n val_loss = 0.0\n with torch.no_grad():\n for val_data, val_targets in val_loader:\n val_data, val_targets = val_data.to(device), val_targets.to(device)\n val_outputs = model(val_data)\n val_loss += criterion(val_outputs, val_targets).item()\n \n val_loss /= len(val_loader)\n print(f'Epoch [{epoch+1}/{epochs}], Training Loss: {epoch_loss:.8f}, Validation Loss: {val_loss:.8f}')\n \n if val_loss < best_val_loss:\n best_val_loss = val_loss\n \n print('Training set predictions:')\n with torch.no_grad():\n for data, targets in train_loader:\n data, targets = data.to(device), targets.to(device)\n train_predictions = model(data)\n for i in range(data.size(0)):\n input_str = ', '.join(f\"{x:.2f}\".rstrip('0').rstrip('.') for x in data[i].tolist())\n target_str = f\"{targets[i].item():.4f}\".rstrip('0').rstrip('.')\n prediction_str = f\"{train_predictions[i].item():.4f}\".rstrip('0').rstrip('.')\n loss_str = f\"{criterion(train_predictions[i], targets[i]).item():.8f}\"\n print(f'Input: [{input_str}], Target: {target_str}, Prediction: {prediction_str}, Loss: {loss_str}')\n \n print('Validation set predictions:')\n for val_data, val_targets in val_loader:\n val_data, val_targets = val_data.to(device), val_targets.to(device)\n val_predictions = model(val_data)\n for i in range(val_data.size(0)):\n input_str = ', '.join(f\"{x:.2f}\".rstrip('0').rstrip('.') for x in val_data[i].tolist())\n target_str = f\"{val_targets[i].item():.4f}\".rstrip('0').rstrip('.')\n prediction_str = f\"{val_predictions[i].item():.4f}\".rstrip('0').rstrip('.')\n loss_str = f\"{criterion(val_predictions[i], val_targets[i]).item():.8f}\"\n print(f'Input: [{input_str}], Target: {target_str}, Prediction: {prediction_str}, Loss: {loss_str}')\n \n save_model(model, save_path)\n load_model(model, save_path)\n return model\n \n \n if __name__ == \"__main__\":\n input_size = 2\n hidden_size = 2\n output_size = 1\n initial_lr = 0.05 \n epochs = 1000\n model_filepath = 'improved_nn.pth'\n batch_size = 16\n \n x_train = torch.tensor([\n [1.0, 2.0], [2.0, 3.0], [3.0, 4.0], [-5.0, 6.0], [-2.56, 6.0], [4.0, 5.0],\n [10.0, 11.0], [15.5, 16.5], [-20.0, -30.0], [25.75, 26.25], [-35.5, 40.5], [45.0, 46.0],\n [50.0, -60.0], [-70.0, 80.0], [90.1, 100.2], [110.3, -120.4], [-130.5, 140.6], [150.7, 160.8],\n [170.9, -180.1], [190.2, 200.3], [-210.4, 220.5], [230.6, -240.7], [-250.8, 260.9], [270.1, 280.2],\n [290.3, -300.4], [-310.5, 320.6], [330.7, 340.8], [350.9, -360.1], [370.2, 380.3], [-390.4, 400.5],\n [410.6, -420.7], [-430.8, 440.9], [450.1, 460.2], [470.3, -480.4], [-490.5, 500.6], [510.7, 520.8],\n [530.9, -540.1], [550.2, 560.3], [-570.4, 580.5], [590.6, -600.7], [-610.8, 620.9], [630.1, 640.2],\n [650.3, -660.4], [-670.5, 680.6], [690.7, 700.8], [710.9, -720.1], [730.2, 740.3], [-750.4, 760.5],\n [770.6, -780.7], [-790.8, 800.9], [810.1, 820.2], [830.3, -840.4], [-850.5, 860.6], [870.7, 880.8]\n ], dtype=torch.float32)\n \n y_train = torch.tensor([\n [3.0], [5.0], [7.0], [1.0], [3.44], [9.0], \n [21.0], [32.0], [-50.0], [52.0], [5.0], [91.0],\n [-10.0], [10.0], [190.3], [-10.1], [10.1], [311.5],\n [-9.2], [390.5], [10.1], [-10.1], [10.1], [550.3],\n [-10.1], [330.2], [671.5], [-10.1], [540.5], [10.1],\n [-10.1], [871.5], [911.5], [-10.1], [110.1], [990.3],\n [-10.1], [220.3], [5.0], [-10.1], [540.3], [1100.5],\n [-10.1], [331.2], [450.2], [-10.1], [550.3], [620.5],\n [-10.1], [770.5], [810.1], [-10.1], [220.3], [550.3]\n ], dtype=torch.float32)\n \n x_val = torch.tensor([\n [5.0, 6.0], [6.0, 7.0], [8.5, 9.5], [-10.5, 11.5], [-12.5, 13.5], [14.5, 15.5],\n [16.5, 17.5], [-18.5, 19.5], [20.5, 21.5], [-22.5, 23.5], [24.5, 25.5], [-26.5, 27.5]\n ], dtype=torch.float32)\n \n y_val = torch.tensor([\n [11.0], [13.0], [18.0], [1.0], [1.0], [30.0],\n [34.0], [1.0], [42.0], [1.0], [50.0], [1.0]\n ], dtype=torch.float32)\n \n train_dataset = TensorDataset(x_train, y_train)\n train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n \n val_dataset = TensorDataset(x_val, y_val)\n val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)\n \n model = ImprovedNN(input_size, hidden_size, output_size).to(device)\n \n try:\n load_model(model, model_filepath)\n print(f'Model loaded from {model_filepath}')\n except (FileNotFoundError, RuntimeError):\n print(f'No compatible saved model found at {model_filepath}. Training a new model.')\n \n model = train_model(model, train_loader, val_loader, epochs=epochs, initial_lr=initial_lr, save_path=model_filepath)\n \n save_model(model, model_filepath)\n print(f'Model saved to {model_filepath}')\n \n load_model(model, model_filepath)\n print(f'Model loaded from {model_filepath}')\n \n test_data = torch.tensor([[10.0, 20.0], [30.0, 40.0]], dtype=torch.float32)\n test_data = test_data.to(device)\n predictions = model(test_data)\n predictions_formatted = [f\"{p[0]:.4f}\".rstrip('0').rstrip('.') for p in predictions.tolist()]\n print(f'Predictions: {predictions_formatted}')\n \n\nI'm using Visual Studio Code. Python 3.10.8.\n\nYou'd expect with this trainingdata that it can do it within 1k epochs. Even within less. But no, it can't even do it within 50k?!\n\nI don't know what is wrong, so please help me! Im tired af.\n\nPlease do not reply with anything like \"It's just addition, why do you need a neural network for that??\" as this is just an experiment and I will teach it to do other things as well.\n\n",
"label": "r/pytorch",
"dataType": "post",
"communityName": "r/pytorch",
"datetime": "2024-05-25",
"username_encoded": "Z0FBQUFBQm5Lak14VlJySFJFa01JMkxyQTA3Y1J4eFJGWC1vcHA5UkduQmljUzZnTHNiWXZGYU5CZ3hXejYxRUZmWElNV3dSVDlxelMwbndnMGxndV85UGI0NlU2V29DU1E9PQ==",
"url_encoded": "Z0FBQUFBQm5LalBDaVNrN2R4OU9rNjQtdVRvelFhRHhUeGgyZkt5amZ2XzVtYXpEUWlCbm51ZkJpR1NidHpxTnBqMUZZMnFVYkZpSXktZUV3Q0E5Z3h0X3RBNklBcm8yNmNhc19SUEt3dUZQODlqalRMSm9KSGJqM0Z5TC1wbDAzN1FtTDVLMEhDRUM3MTd3b25UX0dudEZYLXRyM0xDSmVoLTVRRWgtWDhrb3NFeXpXNHZPLTNjcmtLUG51S01MaS05YnNXanRyaVhz"
}
Entry Information
- Entry ID: 99716
- Repository: Axioma AXP
- Dataset: arrmlet/reddit_dataset_36
- Total Entries: 100,000