完成实验2

This commit is contained in:
Jingfan Ke 2023-10-24 20:15:43 +08:00
parent 7e8fea0a3b
commit d76db395de
10 changed files with 739 additions and 161 deletions

View File

@ -125,7 +125,7 @@ if __name__ == "__main__":
avg_epoch_acc = total_epoch_acc / len(test_regression_dataset)
print(
f"Epoch [{epoch + 1}/{num_epochs}],",
f"Train Loss: {total_epoch_loss},",
f"Train Loss: {total_epoch_loss:.10f},",
f"Used Time: {train_time * 1000:.3f}ms,",
f"Test Acc: {avg_epoch_acc * 100:.3f}%,",
f"Used Time: {test_time * 1000:.3f}ms",

View File

@ -130,7 +130,7 @@ if __name__ == "__main__":
avg_epoch_acc = total_epoch_acc / len(test_binarycls_dataset)
print(
f"Epoch [{epoch + 1}/{num_epochs}],",
f"Train Loss: {total_epoch_loss},",
f"Train Loss: {total_epoch_loss:.10f},",
f"Used Time: {train_time * 1000:.3f}ms,",
f"Test Acc: {avg_epoch_acc * 100:.3f}%,",
f"Used Time: {test_time * 1000:.3f}ms",

View File

@ -118,7 +118,7 @@ if __name__ == "__main__":
avg_epoch_acc = total_epoch_acc / len(test_mnist_dataset)
print(
f"Epoch [{epoch + 1}/{num_epochs}],",
f"Train Loss: {total_epoch_loss},",
f"Train Loss: {total_epoch_loss:.10f},",
f"Used Time: {train_time * 1000:.3f}ms,",
f"Test Acc: {avg_epoch_acc * 100:.3f}%,",
f"Used Time: {test_time * 1000:.3f}ms",

View File

@ -107,7 +107,7 @@ if __name__ == "__main__":
avg_epoch_acc = total_epoch_acc / len(test_regression_dataset)
print(
f"Epoch [{epoch + 1}/{num_epochs}],",
f"Train Loss: {total_epoch_loss},",
f"Train Loss: {total_epoch_loss:.10f},",
f"Used Time: {train_time * 1000:.3f}ms,",
f"Test Acc: {avg_epoch_acc * 100:.3f}%,",
f"Used Time: {test_time * 1000:.3f}ms",

View File

@ -111,7 +111,7 @@ if __name__ == "__main__":
avg_epoch_acc = total_epoch_acc / len(test_binarycls_dataset)
print(
f"Epoch [{epoch + 1}/{num_epochs}],",
f"Train Loss: {total_epoch_loss},",
f"Train Loss: {total_epoch_loss:.10f},",
f"Used Time: {train_time * 1000:.3f}ms,",
f"Test Acc: {avg_epoch_acc * 100:.3f}%,",
f"Used Time: {test_time * 1000:.3f}ms",

View File

@ -99,7 +99,7 @@ if __name__ == "__main__":
avg_epoch_acc = total_epoch_acc / len(test_mnist_dataset)
print(
f"Epoch [{epoch + 1}/{num_epochs}],",
f"Train Loss: {total_epoch_loss},",
f"Train Loss: {total_epoch_loss:.10f},",
f"Used Time: {train_time * 1000:.3f}ms,",
f"Test Acc: {avg_epoch_acc * 100:.3f}%,",
f"Used Time: {test_time * 1000:.3f}ms",

View File

@ -76,7 +76,35 @@ class Model_3_3(nn.Module):
return x
class Model_3_4(nn.Module):
def __init__(self, num_classes):
super().__init__()
self.flatten = nn.Flatten()
self.fc1 = nn.Linear(in_features=28 * 28, out_features=1024)
self.fc2 = nn.Linear(in_features=1024, out_features=256)
self.fc3 = nn.Linear(in_features=256, out_features=num_classes)
self.activate_fn = leaky_relu
def forward(self, x: torch.Tensor):
x = self.flatten(x)
x = self.fc1(x)
x = self.activate_fn(x)
x = self.fc2(x)
x = self.activate_fn(x)
x = self.fc3(x)
x = self.activate_fn(x)
return x
if __name__ == "__main__":
train_MNIST_CLS(Model=Model_3_1)
train_MNIST_CLS(Model=Model_3_2)
train_MNIST_CLS(Model=Model_3_3)
print("模型1开始训练激活函数为relu")
train_loss_3_1, test_acc_3_1 = train_MNIST_CLS(Model=Model_3_1) # 激活函数为relu
print("模型2开始训练激活函数为sigmoid")
train_loss_3_2, test_acc_3_2 = train_MNIST_CLS(Model=Model_3_2) # 激活函数为sigmoid
print("模型3开始训练激活函数为tanh")
train_loss_3_3, test_acc_3_3 = train_MNIST_CLS(Model=Model_3_3) # 激活函数为tanh
print("模型4开始训练激活函数为leaky_relu")
train_loss_3_4, test_acc_3_4 = train_MNIST_CLS(Model=Model_3_4) # 激活函数为leaky_relu

102
Lab2/code/4.py Normal file
View File

@ -0,0 +1,102 @@
import time
import numpy as np
import torch
from torch.nn.functional import *
from torch.utils.data import Dataset, DataLoader
from torch import nn
from torchvision import datasets, transforms
from tqdm import tqdm
from utils import *
import ipdb
class Model_4_1(nn.Module):
def __init__(self, num_classes):
super().__init__()
self.flatten = nn.Flatten()
self.fc1 = nn.Linear(in_features=28 * 28, out_features=512)
self.fc2 = nn.Linear(in_features=512, out_features=num_classes)
self.activate_fn = leaky_relu
def forward(self, x: torch.Tensor):
x = self.flatten(x)
x = self.fc1(x)
x = self.activate_fn(x)
x = self.fc2(x)
x = self.activate_fn(x)
return x
class Model_4_2(nn.Module):
def __init__(self, num_classes):
super().__init__()
self.flatten = nn.Flatten()
self.fc1 = nn.Linear(in_features=28 * 28, out_features=1024)
self.fc2 = nn.Linear(in_features=1024, out_features=num_classes)
self.activate_fn = leaky_relu
def forward(self, x: torch.Tensor):
x = self.flatten(x)
x = self.fc1(x)
x = self.activate_fn(x)
x = self.fc2(x)
x = self.activate_fn(x)
return x
class Model_4_3(nn.Module):
def __init__(self, num_classes):
super().__init__()
self.flatten = nn.Flatten()
self.fc1 = nn.Linear(in_features=28 * 28, out_features=512)
self.fc2 = nn.Linear(in_features=512, out_features=512)
self.fc3 = nn.Linear(in_features=512, out_features=num_classes)
self.activate_fn = leaky_relu
def forward(self, x: torch.Tensor):
x = self.flatten(x)
x = self.fc1(x)
x = self.activate_fn(x)
x = self.fc2(x)
x = self.activate_fn(x)
x = self.fc3(x)
x = self.activate_fn(x)
return x
class Model_4_4(nn.Module):
def __init__(self, num_classes):
super().__init__()
self.flatten = nn.Flatten()
self.fc1 = nn.Linear(in_features=28 * 28, out_features=1024)
self.fc2 = nn.Linear(in_features=1024, out_features=1024)
self.fc3 = nn.Linear(in_features=1024, out_features=num_classes)
self.activate_fn = leaky_relu
def forward(self, x: torch.Tensor):
x = self.flatten(x)
x = self.fc1(x)
x = self.activate_fn(x)
x = self.fc2(x)
x = self.activate_fn(x)
x = self.fc3(x)
x = self.activate_fn(x)
return x
if __name__ == "__main__":
print("模型1开始训练hidden_size=512hidden_layer=1 ")
train_loss_4_1, test_acc_4_1 = train_MNIST_CLS(Model=Model_4_1) # hidden_size=512, hidden_layer=1
print("模型2开始训练hidden_size=1024hidden_layer=1 ")
train_loss_4_2, test_acc_4_2 = train_MNIST_CLS(Model=Model_4_2) # hidden_size=1024, hidden_layer=1
print("模型3开始训练hidden_size=512hidden_layer=2 ")
train_loss_4_3, test_acc_4_3 = train_MNIST_CLS(Model=Model_4_3) # hidden_size=512, hidden_layer=2
print("模型4开始训练hidden_size=1024hidden_layer=2 ")
train_loss_4_4, test_acc_4_4 = train_MNIST_CLS(Model=Model_4_4) # hidden_size=1024, hidden_layer=2

View File

@ -106,7 +106,7 @@ class My_optimizer:
def train_MNIST_CLS(Model:nn.Module):
learning_rate = 5e-2
learning_rate = 8e-2
num_epochs = 10
batch_size = 512
num_classes = 10
@ -139,6 +139,8 @@ def train_MNIST_CLS(Model:nn.Module):
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
train_loss = list()
test_acc = list()
for epoch in range(num_epochs):
model.train()
total_epoch_loss = 0
@ -182,8 +184,11 @@ def train_MNIST_CLS(Model:nn.Module):
avg_epoch_acc = total_epoch_acc / len(test_mnist_dataset)
print(
f"Epoch [{epoch + 1}/{num_epochs}],",
f"Train Loss: {total_epoch_loss},",
f"Train Loss: {total_epoch_loss:.10f},",
f"Used Time: {train_time * 1000:.3f}ms,",
f"Test Acc: {avg_epoch_acc * 100:.3f}%,",
f"Used Time: {test_time * 1000:.3f}ms",
)
train_loss.append(total_epoch_loss)
test_acc.append(avg_epoch_acc * 100)
return train_loss, test_acc

File diff suppressed because one or more lines are too long