DrujZ-cmd commited on
Commit
2dfdcd4
·
0 Parent(s):

AI417 A5 AlexNet model

Browse files
Files changed (6) hide show
  1. .gitattributes +35 -0
  2. README.md +3 -0
  3. alexnet_weights.pth +3 -0
  4. hubconf.py +11 -0
  5. model.py +51 -0
  6. train.py +74 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ ---
alexnet_weights.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ac4b336b945369337fa90a3ddb7999979aad01e91ce51480c887ce9286231c5b
3
+ size 24202694
hubconf.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from model import CNNModel
3
+
4
+ def AlexNet(pretrained=True):
5
+ model = CNNModel()
6
+
7
+ if pretrained:
8
+ state_dict = torch.load("alexnet_weights.pth", map_location="cpu")
9
+ model.load_state_dict(state_dict)
10
+
11
+ return model
model.py ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import torch.optim as optim
4
+
5
+ class CNNModel(nn.Module):
6
+
7
+ def __init__(self):
8
+ super(CNNModel, self).__init__()
9
+ self.conv1 = nn.Conv2d(3, 64, kernel_size=5, padding=2)
10
+ self.relu1 = nn.ReLU()
11
+ self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
12
+ self.conv2 = nn.Conv2d(64, 128, kernel_size=5, padding=2)
13
+ self.relu2 = nn.ReLU()
14
+ self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
15
+ self.conv3 = nn.Conv2d(128, 256, kernel_size=3, padding=1)
16
+ self.relu3 = nn.ReLU()
17
+ self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
18
+ self.conv4 = nn.Conv2d(256, 384, kernel_size=5, padding=1)
19
+ self.relu4 = nn.ReLU()
20
+ self.conv5 = nn.Conv2d(384, 256, kernel_size=1, padding=0)
21
+ self.relu5 = nn.ReLU()
22
+ self.avgpool = nn.AdaptiveAvgPool2d((3, 3))
23
+ self.flatten = nn.Flatten()
24
+ self.dropout1 = nn.Dropout(p=0.1)
25
+ self.fc1 = nn.Linear(256 * 3 * 3, 1024)
26
+ self.relu6 = nn.ReLU()
27
+ self.dropout2 = nn.Dropout(p=0.1)
28
+ self.fc2 = nn.Linear(1024, 512)
29
+ self.relu7 = nn.ReLU()
30
+ self.fc3 = nn.Linear(512, 200)
31
+ self.softmax = nn.Softmax(dim=1)
32
+
33
+ def forward(self, x):
34
+ x = self.pool1(self.relu1(self.conv1(x)))
35
+ x = self.pool2(self.relu2(self.conv2(x)))
36
+ x = self.pool3(self.relu3(self.conv3(x)))
37
+ x = self.relu4(self.conv4(x))
38
+ x = self.relu5(self.conv5(x))
39
+ x = self.avgpool(x)
40
+ x = self.flatten(x)
41
+ x = self.dropout1(x)
42
+ x = self.relu6(self.fc1(x))
43
+ x = self.dropout2(x)
44
+ x = self.relu7(self.fc2(x))
45
+ x = self.fc3(x)
46
+ x = self.softmax(x)
47
+ return x
48
+
49
+ model = CNNModel()
50
+ loss_fn = nn.NLLLoss()
51
+ optimizer = optim.Adam(model.parameters(), lr=0.0003)
train.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+ import torch as tr
3
+ import torchvision as tv
4
+ import torchvision.transforms as transforms
5
+ from model import model, loss_fn, optimizer
6
+
7
+ def main():
8
+ batch_size = 128
9
+ epochs = 10
10
+ transform = transforms.Compose([
11
+ transforms.Resize((64, 64)),
12
+ transforms.ToTensor()])
13
+
14
+ trn_dataset = tv.datasets.ImageFolder(
15
+ root='data/tiny-imagenet-200/train',
16
+ transform=transform)
17
+
18
+ evl_dataset = tv.datasets.ImageFolder(
19
+ root='data/tiny-imagenet-200/val',
20
+ transform=transform)
21
+
22
+ trn_loader = tr.utils.data.DataLoader(
23
+ trn_dataset,
24
+ batch_size=batch_size,
25
+ shuffle=True,
26
+ num_workers=8,
27
+ pin_memory=True)
28
+
29
+ evl_loader = tr.utils.data.DataLoader(
30
+ evl_dataset,
31
+ batch_size=batch_size,
32
+ shuffle=False,
33
+ num_workers=8,
34
+ pin_memory=True)
35
+
36
+ device = tr.device("cuda" if tr.cuda.is_available() else "cpu")
37
+ model.to(device)
38
+ print("Running on:", device)
39
+ start_time = time.time()
40
+ for epoch in range(1, epochs + 1):
41
+ model.train()
42
+ for images, labels in trn_loader:
43
+ images = images.to(device)
44
+ labels = labels.to(device)
45
+ optimizer.zero_grad()
46
+ output = model(images)
47
+ loss = loss_fn(tr.log(tr.clamp(output, min=1e-9)), labels)
48
+ loss.backward()
49
+ optimizer.step()
50
+ model.eval()
51
+ correct = 0
52
+ total = 0
53
+
54
+ with tr.no_grad():
55
+ for images, labels in evl_loader:
56
+ images = images.to(device)
57
+ labels = labels.to(device)
58
+ output = model(images)
59
+ preds = tr.argmax(output, dim=1)
60
+ correct += tr.sum(preds == labels).item()
61
+ total += labels.size(0)
62
+ accuracy = correct / total
63
+ print(f"Epoch {epoch}/{epochs} - Loss: {loss.item():.4f} - Accuracy: {accuracy*100:.2f}%")
64
+
65
+ end_time = time.time()
66
+
67
+ print("Training finished")
68
+ print(f"Final Loss: {loss.item():.4f}")
69
+ print(f"Final Accuracy: {accuracy*100:.2f}%")
70
+ print(f"Total Time: {end_time - start_time:.2f} seconds")
71
+
72
+
73
+ if __name__ == "__main__":
74
+ main()