This repository was archived by the owner on Sep 13, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 264
This is a pull request for Autonomy Bootcamp [OLD] by Vibhinn Gautam #182
Open
Ralenze
wants to merge
2
commits into
UWARG:master
Choose a base branch
from
Ralenze:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,17 +1,168 @@ | ||
| """ | ||
| This is a starter file to get you going. You may also include other files if you feel it's necessary. | ||
| import numpy as np | ||
| import matplotlib.pyplot as plt | ||
| import torch | ||
| import torchvision | ||
|
|
||
| Make sure to follow the code convention described here: | ||
| https://github.com/UWARG/computer-vision-python/blob/main/README.md#naming-and-typing-conventions | ||
| import torch.nn as nn | ||
| import torch.optim as optim | ||
| from torch import flatten | ||
| from torch.nn import LogSoftmax | ||
| import torch.nn.functional as F | ||
| import torchvision.transforms as transforms | ||
|
|
||
| Hints: | ||
| * The internet is your friend! Don't be afraid to search for tutorials/intros/etc. | ||
| * We suggest using a convolutional neural network. | ||
| * TensorFlow Keras has the CIFAR-10 dataset as a module, so you don't need to manually download and unpack it. | ||
| """ | ||
| transform = transforms.Compose( | ||
| [transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) | ||
| ]) | ||
|
|
||
| # Import whatever libraries/modules you need | ||
| # this is our test set | ||
| test = torchvision.datasets.CIFAR10(root='./data', train=False, | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit: Try using a better variable name. For example |
||
| download=True, transform=transform) | ||
| testset = torch.utils.data.DataLoader(test, batch_size=32, | ||
| shuffle=False, num_workers=0) | ||
|
|
||
| import numpy as np | ||
| # development set | ||
| train = torchvision.datasets.CIFAR10(root='./data', train=True, | ||
| download=True, transform=transform) | ||
| trainset = torch.utils.data.DataLoader(train, batch_size=32, | ||
| shuffle=True, num_workers=0) | ||
|
|
||
| # this is our machine | ||
|
|
||
|
|
||
| class Net(nn.Module): | ||
| def __init__(self): | ||
|
|
||
| super(Net, self).__init__() | ||
| # here is our first convolutional layer | ||
|
|
||
| self.conv1 = nn.Sequential( | ||
| nn.Conv2d(in_channels=3, out_channels=32, | ||
| kernel_size=3, padding=1), | ||
| nn.BatchNorm2d(32), | ||
| nn.ReLU(inplace=True), | ||
| nn.MaxPool2d(kernel_size=2, stride=2), | ||
|
|
||
| ) | ||
| # here is our second convolutional layer | ||
| self.conv2 = nn.Sequential( | ||
| nn.Conv2d(in_channels=32, out_channels=64, | ||
| kernel_size=3, padding=1), | ||
| nn.BatchNorm2d(64), | ||
| nn.ReLU(inplace=True), | ||
| nn.MaxPool2d(kernel_size=2, stride=2), | ||
| nn.Dropout2d(p=0.05), | ||
|
|
||
|
|
||
|
|
||
| ) | ||
| # this is our fully connected layer | ||
| self.fc1 = nn.Sequential( | ||
| nn.Dropout(p=0.1), | ||
| nn.Linear(4096, 2048), | ||
| nn.ReLU(inplace=True), | ||
| nn.Linear(2048, 1024), | ||
| nn.ReLU(inplace=True), | ||
| nn.Linear(1024, 512), | ||
| nn.ReLU(inplace=True), | ||
| nn.Dropout(p=0.1), | ||
| nn.Linear(512, 10) | ||
| ) | ||
| self.logSoftmax = LogSoftmax(dim=1) | ||
|
|
||
| def forward(self, x): | ||
| ''' | ||
| We first create one conv layer, and then create another one (for better accuracy) | ||
| Finally, we flatten our values up to a max of 1 and then create a fully connected layer | ||
| ''' | ||
| x = self.conv1(x) | ||
|
|
||
| x = self.conv2(x) | ||
|
|
||
| x = flatten(x, 1) | ||
| x = self.fc1(x) | ||
| output = self.logSoftmax(x) | ||
| return output | ||
|
|
||
|
|
||
| # We initialize our machine neural network here | ||
| net = Net() | ||
|
|
||
| # We initialize some variables that we would like to plot later | ||
| cycle = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) | ||
| training_loss = [] | ||
| validation_loss = [] | ||
| validation_accuracy = [] | ||
| # Our loss function | ||
| loss_function = nn.CrossEntropyLoss() | ||
| optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) | ||
| # Our network will have 12 run cycles | ||
| for epoch in range(12): | ||
|
|
||
| '''The following variables will allow us to | ||
| calculate our training loss and accuracies etc''' | ||
| run_loss = 0.0 | ||
| total_correct = 0 | ||
| total_size = 0 | ||
| train_correct = 0 | ||
| train_total = 0 | ||
| for inputs, label in trainset: | ||
| # plug in our data to the machine and grab the output | ||
| output = net(inputs) | ||
| target = torch.randn(10) | ||
| target = target.view(1, -1) | ||
| # get network loss and run it back into our system to improve it | ||
| loss = loss_function(output, label) | ||
|
|
||
| optimizer.zero_grad() | ||
| # used to figure out our training loss | ||
| run_loss += loss.item() | ||
| _, predicted = torch.max(output, 1) | ||
| total_correct += (predicted == label).sum().item() | ||
| total_size += label.size(0) | ||
| loss.backward() | ||
| optimizer.step() | ||
| # calculate our training accuracy | ||
| train_correct += (torch.argmax(output, 1) == label).float().sum() | ||
| train_total += len(label) | ||
| # attempt to optimize weights to account for loss/gradients | ||
| # print loss. We hope loss (a measure of wrong-ness) declines! | ||
| print(run_loss/len(trainset)) | ||
| print("Training Accuracy: ", train_correct/train_total) | ||
| # append our results into arrays for plotting | ||
|
|
||
| training_loss.append((run_loss/len(trainset))) | ||
| # we use these for our test set calculations | ||
| # also resetting run_loss although another variable may have been better | ||
| correct = 0 | ||
| total = 0 | ||
| run_loss = 0.0 | ||
|
|
||
| for inputs, labels in testset: | ||
| # plug our data into our machine and retrieve uotput | ||
| output = net(inputs) | ||
| _, predicted = torch.max(output.data, 1) | ||
| # calculate our correctness | ||
| correct += (torch.argmax(output, 1) == labels).float().sum() | ||
| total += len(labels) | ||
| print("Accuracy: ", correct/total) | ||
| # append our results into arrays for plotting | ||
| validation_loss.append(1-correct/total) | ||
| validation_accuracy.append(correct/total) | ||
| train_loss = np.array(training_loss) | ||
| validation_loss = np.array(validation_loss) | ||
|
|
||
| # Your working code here | ||
| ''' | ||
| The part below helps plot our graphs for training and validation loss and accuracy | ||
| We create two double-line graphs in the below area | ||
| ''' | ||
| plt.plot(cycle, train_loss) | ||
| plt.plot(cycle, validation_loss) | ||
| plt.xlabel("Epochs") | ||
| plt.ylabel("Loss") | ||
| plt.title("Network Loss") | ||
| plt.legend(["Training Loss", "Validation Loss"]) | ||
| plt.show() | ||
| plt.plot(cycle, np.array(validation_accuracy)) | ||
| plt.title("Network Accuracy") | ||
| plt.show() | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: Keep ending square bracket in line 14 and remove tab from line 15. Take a look at our Python Style Guide in Confluence for more info on our style. (You do not need to change anything here, just smth to think about).