From 1e25f418ae48210a2eb087c343dd4b70cd26c005 Mon Sep 17 00:00:00 2001 From: kejingfan Date: Wed, 11 Oct 2023 00:05:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9requirements.txt=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=B7=BB=E5=8A=A0main=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab1/code/2.1.py | 95 ++++++++++++++++--------------- Lab1/code/2.2.py | 101 +++++++++++++++++---------------- Lab1/code/3.1.py | 139 +++++++++++++++++++++++---------------------- Lab1/code/3.2.py | 145 ++++++++++++++++++++++++----------------------- requirements.txt | 122 +-------------------------------------- 5 files changed, 244 insertions(+), 358 deletions(-) diff --git a/Lab1/code/2.1.py b/Lab1/code/2.1.py index 560ca53..6c65394 100644 --- a/Lab1/code/2.1.py +++ b/Lab1/code/2.1.py @@ -95,53 +95,54 @@ class My_Dataset(Dataset): return x, y -learning_rate = 5e-2 -num_epochs = 10 -batch_size = 1024 -device = "cuda:0" if torch.cuda.is_available() else "cpu" +if __name__ == "__main__": + learning_rate = 5e-2 + num_epochs = 10 + batch_size = 1024 + device = "cuda:0" if torch.cuda.is_available() else "cpu" -dataset = My_Dataset() -dataloader = DataLoader( - dataset=dataset, - batch_size=batch_size, - shuffle=True, - num_workers=14, - pin_memory=True, -) - -model = Model_2_1().to(device) -criterion = My_BCELoss() -optimizer = My_optimizer(model.parameters(), lr=learning_rate) - -for epoch in range(num_epochs): - total_epoch_loss = 0 - total_epoch_pred = 0 - total_epoch_target = 0 - for index, (x, targets) in tqdm(enumerate(dataloader), total=len(dataloader)): - optimizer.zero_grad() - x = x.to(device).to(dtype=torch.float32) - targets = targets.to(device).to(dtype=torch.float32) - x = x.unsqueeze(1) - y_pred = model(x) - loss = criterion(y_pred, targets) - total_epoch_loss += loss.item() - total_epoch_target += targets.sum().item() - total_epoch_pred += y_pred.sum().item() - - loss.backward() - optimizer.step() - - print( - f"Epoch {epoch + 1}/{num_epochs}, Loss: {total_epoch_loss}, Acc: {1 - abs(total_epoch_pred - total_epoch_target) / total_epoch_target}" + dataset = My_Dataset() + dataloader = DataLoader( + dataset=dataset, + batch_size=batch_size, + shuffle=True, + num_workers=14, + pin_memory=True, ) -with torch.no_grad(): - test_data = (np.array([[2]]) - dataset.min_x) / (dataset.max_x - dataset.min_x) - test_data = Variable( - torch.tensor(test_data, dtype=torch.float64), requires_grad=False - ).to(device) - predicted = model(test_data).to("cpu") - print( - f"Model weights: {model.linear.weight.item()}, bias: {model.linear.bias.item()}" - ) - print(f"Prediction for test data: {predicted.item()}") + model = Model_2_1().to(device) + criterion = My_BCELoss() + optimizer = My_optimizer(model.parameters(), lr=learning_rate) + + for epoch in range(num_epochs): + total_epoch_loss = 0 + total_epoch_pred = 0 + total_epoch_target = 0 + for index, (x, targets) in tqdm(enumerate(dataloader), total=len(dataloader)): + optimizer.zero_grad() + x = x.to(device).to(dtype=torch.float32) + targets = targets.to(device).to(dtype=torch.float32) + x = x.unsqueeze(1) + y_pred = model(x) + loss = criterion(y_pred, targets) + total_epoch_loss += loss.item() + total_epoch_target += targets.sum().item() + total_epoch_pred += y_pred.sum().item() + + loss.backward() + optimizer.step() + + print( + f"Epoch {epoch + 1}/{num_epochs}, Loss: {total_epoch_loss}, Acc: {1 - abs(total_epoch_pred - total_epoch_target) / total_epoch_target}" + ) + + with torch.no_grad(): + test_data = (np.array([[2]]) - dataset.min_x) / (dataset.max_x - dataset.min_x) + test_data = Variable( + torch.tensor(test_data, dtype=torch.float64), requires_grad=False + ).to(device) + predicted = model(test_data).to("cpu") + print( + f"Model weights: {model.linear.weight.item()}, bias: {model.linear.bias.item()}" + ) + print(f"Prediction for test data: {predicted.item()}") diff --git a/Lab1/code/2.2.py b/Lab1/code/2.2.py index 1c92a0b..f31a9ec 100644 --- a/Lab1/code/2.2.py +++ b/Lab1/code/2.2.py @@ -38,56 +38,57 @@ class My_Dataset(Dataset): return x, y -learning_rate = 5e-2 -num_epochs = 10 -batch_size = 1024 -device = "cuda:0" if torch.cuda.is_available() else "cpu" +if __name__ == "__main__": + learning_rate = 5e-2 + num_epochs = 10 + batch_size = 1024 + device = "cuda:0" if torch.cuda.is_available() else "cpu" -dataset = My_Dataset() -dataloader = DataLoader( - dataset=dataset, - batch_size=batch_size, - shuffle=True, - num_workers=14, - pin_memory=True, -) - -model = Model_2_2().to(device) -criterion = nn.BCELoss() -optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) - -for epoch in range(num_epochs): - total_epoch_loss = 0 - total_epoch_pred = 0 - total_epoch_target = 0 - for index, (x, targets) in tqdm(enumerate(dataloader), total=len(dataloader)): - optimizer.zero_grad() - - x = x.to(device) - targets = targets.to(device) - - x = x.unsqueeze(1) - targets = targets.unsqueeze(1) - y_pred = model(x) - loss = criterion(y_pred, targets) - total_epoch_loss += loss.item() - total_epoch_target += targets.sum().item() - total_epoch_pred += y_pred.sum().item() - - loss.backward() - optimizer.step() - - print( - f"Epoch {epoch + 1}/{num_epochs}, Loss: {total_epoch_loss}, Acc: {1 - abs(total_epoch_pred - total_epoch_target) / total_epoch_target}" + dataset = My_Dataset() + dataloader = DataLoader( + dataset=dataset, + batch_size=batch_size, + shuffle=True, + num_workers=14, + pin_memory=True, ) -with torch.no_grad(): - test_data = (np.array([[2]]) - dataset.min_x) / (dataset.max_x - dataset.min_x) - test_data = Variable( - torch.tensor(test_data, dtype=torch.float64), requires_grad=False - ).to(device) - predicted = model(test_data).to("cpu") - print( - f"Model weights: {model.linear.weight.item()}, bias: {model.linear.bias.item()}" - ) - print(f"Prediction for test data: {predicted.item()}") + model = Model_2_2().to(device) + criterion = nn.BCELoss() + optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) + + for epoch in range(num_epochs): + total_epoch_loss = 0 + total_epoch_pred = 0 + total_epoch_target = 0 + for index, (x, targets) in tqdm(enumerate(dataloader), total=len(dataloader)): + optimizer.zero_grad() + + x = x.to(device) + targets = targets.to(device) + + x = x.unsqueeze(1) + targets = targets.unsqueeze(1) + y_pred = model(x) + loss = criterion(y_pred, targets) + total_epoch_loss += loss.item() + total_epoch_target += targets.sum().item() + total_epoch_pred += y_pred.sum().item() + + loss.backward() + optimizer.step() + + print( + f"Epoch {epoch + 1}/{num_epochs}, Loss: {total_epoch_loss}, Acc: {1 - abs(total_epoch_pred - total_epoch_target) / total_epoch_target}" + ) + + with torch.no_grad(): + test_data = (np.array([[2]]) - dataset.min_x) / (dataset.max_x - dataset.min_x) + test_data = Variable( + torch.tensor(test_data, dtype=torch.float64), requires_grad=False + ).to(device) + predicted = model(test_data).to("cpu") + print( + f"Model weights: {model.linear.weight.item()}, bias: {model.linear.bias.item()}" + ) + print(f"Prediction for test data: {predicted.item()}") diff --git a/Lab1/code/3.1.py b/Lab1/code/3.1.py index 9dfcab8..edfb758 100644 --- a/Lab1/code/3.1.py +++ b/Lab1/code/3.1.py @@ -96,73 +96,76 @@ class Model_3_1: return self.params -learning_rate = 5e-1 -num_epochs = 10 -batch_size = 4096 -num_classes = 10 -device = "cuda:0" if torch.cuda.is_available() else "cpu" +if __name__ == "__main__": + learning_rate = 5e-1 + num_epochs = 10 + batch_size = 4096 + num_classes = 10 + device = "cuda:0" if torch.cuda.is_available() else "cpu" -transform = transforms.Compose( - [ - transforms.ToTensor(), - transforms.Normalize((0.5,), (1.0,)), - ] -) -train_dataset = datasets.FashionMNIST( - root="../dataset", train=True, transform=transform, download=True -) -test_dataset = datasets.FashionMNIST( - root="../dataset", train=False, transform=transform, download=True -) -train_loader = DataLoader( - dataset=train_dataset, - batch_size=batch_size, - shuffle=True, - num_workers=14, - pin_memory=True, -) -test_loader = DataLoader( - dataset=test_dataset, - batch_size=batch_size, - shuffle=True, - num_workers=14, - pin_memory=True, -) - -model = Model_3_1(num_classes).to(device) -criterion = My_CrossEntropyLoss() -optimizer = My_optimizer(model.parameters(), lr=learning_rate) - -for epoch in range(num_epochs): - total_epoch_loss = 0 - for index, (images, targets) in tqdm( - enumerate(train_loader), total=len(train_loader) - ): - optimizer.zero_grad() - - images = images.to(device) - targets = targets.to(device).to(dtype=torch.long) - - one_hot_targets = ( - my_one_hot(targets, num_classes=num_classes).to(device).to(dtype=torch.long) - ) - - outputs = model(images) - loss = criterion(outputs, one_hot_targets) - total_epoch_loss += loss - - loss.backward() - optimizer.step() - - total_acc = 0 - with torch.no_grad(): - for index, (image, targets) in tqdm( - enumerate(test_loader), total=len(test_loader) - ): - image = image.to(device) - targets = targets.to(device) - outputs = model(image) - total_acc += (outputs.argmax(1) == targets).sum() - print( - f"Epoch {epoch + 1}/{num_epochs} Train, Loss: {total_epoch_loss}, Acc: {total_acc / len(test_dataset)}" + transform = transforms.Compose( + [ + transforms.ToTensor(), + transforms.Normalize((0.5,), (1.0,)), + ] ) + train_dataset = datasets.FashionMNIST( + root="../dataset", train=True, transform=transform, download=True + ) + test_dataset = datasets.FashionMNIST( + root="../dataset", train=False, transform=transform, download=True + ) + train_loader = DataLoader( + dataset=train_dataset, + batch_size=batch_size, + shuffle=True, + num_workers=14, + pin_memory=True, + ) + test_loader = DataLoader( + dataset=test_dataset, + batch_size=batch_size, + shuffle=True, + num_workers=14, + pin_memory=True, + ) + + model = Model_3_1(num_classes).to(device) + criterion = My_CrossEntropyLoss() + optimizer = My_optimizer(model.parameters(), lr=learning_rate) + + for epoch in range(num_epochs): + total_epoch_loss = 0 + for index, (images, targets) in tqdm( + enumerate(train_loader), total=len(train_loader) + ): + optimizer.zero_grad() + + images = images.to(device) + targets = targets.to(device).to(dtype=torch.long) + + one_hot_targets = ( + my_one_hot(targets, num_classes=num_classes) + .to(device) + .to(dtype=torch.long) + ) + + outputs = model(images) + loss = criterion(outputs, one_hot_targets) + total_epoch_loss += loss + + loss.backward() + optimizer.step() + + total_acc = 0 + with torch.no_grad(): + for index, (image, targets) in tqdm( + enumerate(test_loader), total=len(test_loader) + ): + image = image.to(device) + targets = targets.to(device) + outputs = model(image) + total_acc += (outputs.argmax(1) == targets).sum() + print( + f"Epoch {epoch + 1}/{num_epochs} Train, Loss: {total_epoch_loss}, Acc: {total_acc / len(test_dataset)}" + ) diff --git a/Lab1/code/3.2.py b/Lab1/code/3.2.py index c2ffa1e..4decdc4 100644 --- a/Lab1/code/3.2.py +++ b/Lab1/code/3.2.py @@ -20,77 +20,78 @@ class Model_3_2(nn.Module): return x -learning_rate = 5e-2 -num_epochs = 10 -batch_size = 4096 -num_classes = 10 -device = "cuda:0" if torch.cuda.is_available() else "cpu" +if __name__ == "__main__": + learning_rate = 5e-2 + num_epochs = 10 + batch_size = 4096 + num_classes = 10 + device = "cuda:0" if torch.cuda.is_available() else "cpu" -transform = transforms.Compose( - [ - transforms.ToTensor(), - transforms.Normalize((0.5,), (1.0,)), - ] -) -train_dataset = datasets.FashionMNIST( - root="../dataset", train=True, transform=transform, download=True -) -test_dataset = datasets.FashionMNIST( - root="../dataset", train=False, transform=transform, download=True -) -train_loader = DataLoader( - dataset=train_dataset, - batch_size=batch_size, - shuffle=True, - num_workers=14, - pin_memory=True, -) -test_loader = DataLoader( - dataset=test_dataset, - batch_size=batch_size, - shuffle=True, - num_workers=14, - pin_memory=True, -) - -model = Model_3_2(num_classes).to(device) -criterion = nn.CrossEntropyLoss() -optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) - -for epoch in range(num_epochs): - total_epoch_loss = 0 - model.train() - for index, (images, targets) in tqdm( - enumerate(train_loader), total=len(train_loader) - ): - optimizer.zero_grad() - - images = images.to(device) - targets = targets.to(device) - - one_hot_targets = ( - torch.nn.functional.one_hot(targets, num_classes=num_classes) - .to(device) - .to(dtype=torch.float32) - ) - - outputs = model(images) - loss = criterion(outputs, one_hot_targets) - total_epoch_loss += loss - - loss.backward() - optimizer.step() - - model.eval() - total_acc = 0 - with torch.no_grad(): - for index, (image, targets) in tqdm( - enumerate(test_loader), total=len(test_loader) - ): - image = image.to(device) - targets = targets.to(device) - outputs = model(image) - total_acc += (outputs.argmax(1) == targets).sum() - print( - f"Epoch {epoch + 1}/{num_epochs} Train, Loss: {total_epoch_loss}, Acc: {total_acc / len(test_dataset)}" + transform = transforms.Compose( + [ + transforms.ToTensor(), + transforms.Normalize((0.5,), (1.0,)), + ] ) + train_dataset = datasets.FashionMNIST( + root="../dataset", train=True, transform=transform, download=True + ) + test_dataset = datasets.FashionMNIST( + root="../dataset", train=False, transform=transform, download=True + ) + train_loader = DataLoader( + dataset=train_dataset, + batch_size=batch_size, + shuffle=True, + num_workers=14, + pin_memory=True, + ) + test_loader = DataLoader( + dataset=test_dataset, + batch_size=batch_size, + shuffle=True, + num_workers=14, + pin_memory=True, + ) + + model = Model_3_2(num_classes).to(device) + criterion = nn.CrossEntropyLoss() + optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) + + for epoch in range(num_epochs): + total_epoch_loss = 0 + model.train() + for index, (images, targets) in tqdm( + enumerate(train_loader), total=len(train_loader) + ): + optimizer.zero_grad() + + images = images.to(device) + targets = targets.to(device) + + one_hot_targets = ( + torch.nn.functional.one_hot(targets, num_classes=num_classes) + .to(device) + .to(dtype=torch.float32) + ) + + outputs = model(images) + loss = criterion(outputs, one_hot_targets) + total_epoch_loss += loss + + loss.backward() + optimizer.step() + + model.eval() + total_acc = 0 + with torch.no_grad(): + for index, (image, targets) in tqdm( + enumerate(test_loader), total=len(test_loader) + ): + image = image.to(device) + targets = targets.to(device) + outputs = model(image) + total_acc += (outputs.argmax(1) == targets).sum() + print( + f"Epoch {epoch + 1}/{num_epochs} Train, Loss: {total_epoch_loss}, Acc: {total_acc / len(test_dataset)}" + ) diff --git a/requirements.txt b/requirements.txt index 6e107ed..c02bc74 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,128 +1,8 @@ -anyio==4.0.0 -argon2-cffi==23.1.0 -argon2-cffi-bindings==21.2.0 -arrow==1.3.0 -asttokens==2.4.0 -async-lru==2.0.4 -attrs==23.1.0 -Babel==2.13.0 -backcall==0.2.0 -beautifulsoup4==4.12.2 black==23.9.1 -bleach==6.1.0 -certifi==2023.7.22 -cffi==1.16.0 -charset-normalizer==3.3.0 -click==8.1.7 -comm==0.1.4 -debugpy==1.8.0 -decorator==5.1.1 -defusedxml==0.7.1 -exceptiongroup==1.1.3 -executing==2.0.0 -fastjsonschema==2.18.1 -filelock==3.12.4 -fqdn==1.5.1 -fsspec==2023.9.2 -idna==3.4 ipdb==0.13.13 -ipykernel==6.25.2 -ipython==8.16.1 -ipython-genutils==0.2.0 -ipywidgets==8.1.1 -isoduration==20.11.0 -jedi==0.19.1 -Jinja2==3.1.2 -json5==0.9.14 -jsonpointer==2.4 -jsonschema==4.19.1 -jsonschema-specifications==2023.7.1 jupyter==1.0.0 -jupyter-console==6.6.3 -jupyter-events==0.7.0 -jupyter-lsp==2.2.0 -jupyter_client==8.3.1 -jupyter_core==5.3.2 -jupyter_server==2.7.3 -jupyter_server_terminals==0.4.4 -jupyterlab==4.0.6 -jupyterlab-pygments==0.2.2 -jupyterlab-widgets==3.0.9 -jupyterlab_server==2.25.0 -MarkupSafe==2.1.3 -matplotlib-inline==0.1.6 -mistune==3.0.2 -mpmath==1.3.0 -mypy-extensions==1.0.0 -nbclient==0.8.0 -nbconvert==7.9.2 -nbformat==5.9.2 -nest-asyncio==1.5.8 -networkx==3.1 -notebook==7.0.4 -notebook_shim==0.2.3 numpy==1.26.0 -nvidia-cublas-cu12==12.1.3.1 -nvidia-cuda-cupti-cu12==12.1.105 -nvidia-cuda-nvrtc-cu12==12.1.105 -nvidia-cuda-runtime-cu12==12.1.105 -nvidia-cudnn-cu12==8.9.2.26 -nvidia-cufft-cu12==11.0.2.54 -nvidia-curand-cu12==10.3.2.106 -nvidia-cusolver-cu12==11.4.5.107 -nvidia-cusparse-cu12==12.1.0.106 -nvidia-nccl-cu12==2.18.1 -nvidia-nvjitlink-cu12==12.2.140 -nvidia-nvtx-cu12==12.1.105 -overrides==7.4.0 -packaging==23.2 -pandocfilters==1.5.0 -parso==0.8.3 -pathspec==0.11.2 -pexpect==4.8.0 -pickleshare==0.7.5 -Pillow==10.0.1 -platformdirs==3.11.0 -prometheus-client==0.17.1 -prompt-toolkit==3.0.39 -psutil==5.9.5 -ptyprocess==0.7.0 -pure-eval==0.2.2 -pycparser==2.21 -Pygments==2.16.1 -python-dateutil==2.8.2 -python-json-logger==2.0.7 -PyYAML==6.0.1 -pyzmq==25.1.1 -qtconsole==5.4.4 -QtPy==2.4.0 -referencing==0.30.2 -requests==2.31.0 -rfc3339-validator==0.1.4 -rfc3986-validator==0.1.1 -rpds-py==0.10.4 -Send2Trash==1.8.2 -six==1.16.0 -sniffio==1.3.0 -soupsieve==2.5 -stack-data==0.6.3 -sympy==1.12 -terminado==0.17.1 -tinycss2==1.2.1 -tomli==2.0.1 torch==2.1.0 torchaudio==2.1.0 torchvision==0.16.0 -tornado==6.3.3 -tqdm==4.66.1 -traitlets==5.11.2 -triton==2.1.0 -types-python-dateutil==2.8.19.14 -typing_extensions==4.8.0 -uri-template==1.3.0 -urllib3==2.0.6 -wcwidth==0.2.8 -webcolors==1.13 -webencodings==0.5.1 -websocket-client==1.6.4 -widgetsnbextension==4.0.9 +tqdm==4.66.1 \ No newline at end of file