close_btn
조회 수 913 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

1번. AlexNet 모델구조



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
AlexNet
paper
 
imagenet data(2012)
 
code
 
Model architecturemodel_architecture
 
Naive Version
CONV_1 - POOL_1 - CONV_2 - POOL_2 - CONV_3 - CONV_4 - CONV_5 - POOL_3 - FC1 - FC2 - FC3 (->SOFTMAX)
 
detailed
CONV_1(ReLU) - POOL_1 - CONV_2(ReLU) - POOL_2 - CONV_3(ReLU) - CONV_4(ReLU) - CONV_5(ReLU) - POOL_3 -(Flatten) FC1(ReLU) - FC2(ReLU) - FC3(->SOFTMAX)
 
Q.1 fill in the '????' & 'TODO'
Layer 1 is a Convolution Layer_1
Input Image size 224 x 224 x 3 -> 227 x 227 x 3
 
Number of filters 96
 
Filter size 11 x 11 x 3
 
Stride 4
 
Layer 1 Output 55 x 55 x 96 (because of stride 4)
 
(227-11)/4 + 1
55.0
(11*11*3* 96 + 96 
34944
## TODO ##
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Conv_1 = (11*11*3* 96 + 96 
'''last 96 for Bias'''
Layer 2 is a Max Pooling_1 Followed by Convolution_1
Input 55 x 55 x 96
 
Max pooling
 
Pooling size(overlapping) 3 x 3
 
Stride 2
 
Layer 2 Output 27 x 27 x 96
 
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Max_pool_1 = 0
Layer 3 is a a Convolution Layer_2
Input 27 x 27 x 96
 
Number of filters 256
 
Filter size 5 x 5 x 96
 
Stride 1
 
padding 1
 
Layer 3 Output 27 x 27 x 256
 
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Conv_2 = (5*5*96)*256+256
Layer 4 is a Max Pooling_2 Followed by Convolution_2
Input 27 x 27 x 256
 
Max pooling
 
Pooling size(overlapping) 3 x 3
 
Stride 2
 
Layer 4 Output 13 x 13 x 256
 
# TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Max_pool_2 = 0
Layer 5 is a a Convolution Layer_3
Input 13 x 13 x 256
 
Number of filters 384
 
Filter size 3 x 3 x 256
 
Stride 1
 
padding 2
 
Layer 5 Output 13 x 13 x 384
 
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Conv_3 = (3*3*256)*384 +384
Layer 6 is a Convolution Layer_4
Input 13 x 13 x 384
 
Number of filters 384
 
Filter size 3 x 3 x 384
 
Stride 1
 
padding 1
 
Layer 6 Output 13 x 13 x 384
 
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Conv_4 = (3*3*384)*384 +384
Layer 7 is a Convolution Layer_5
Input 13 x 13 x 384
 
Number of filters 256
 
Filter size 3 x 3 x 384
 
Stride 1
 
padding 1
 
Layer 7 Output 13 x 13 x 256
 
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Conv_5 = (3*3*384)*256 +256
Layer 8 is a Max Pooling_3 Followed by Convolution_5
Input 13 x 13 x 256
 
Max pooling
 
Pooling size(overlapping) 3 x 3
 
Stride 2
 
Layer 8 Output 6 x 6 x 256
 
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
Max_pool_3 = 0
Layer 9 is a Fully_Connected layer_1
input 6 x 6 x 256
 
flatten 4096
 
output size (N,flatten) x (flatten,4096)
 
N Number of input data
 
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
FC1 = (6*6*256)*4096 + 4096
Layer 10 is a Fully_Connected layer_2
input (N,4096)
 
output size (N,4096) x (4096,4096)
 
N Number of input data
 
6
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
FC2 = 4096 * 4096 + 4096
Layer 11 is a Fully_Connected layer_3
input (N,4096)
 
output size (N,4096) x (4096,Num_classes)
 
N Number of input data
 
Num_classes Number of labels
 
 + 4096
## TODO 
######################################################
#  Calculate the number of parameters in this layer  #
######################################################
FC3 = 4096 * 1000 + 4096
 
cs



2번. AlexNet 구현



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
Keras로 Model 구현
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization, Lambda
from keras.regularizers import l2
from keras import backend as K
from keras import optimizers
from keras.engine.topology import Layer
input_shape = (2272273)
model = Sequential()
model.add(Conv2D(96, (1111), strides=4,
                 padding='same', input_shape=input_shape))
model.add(Conv2D(256, (55), activation='relu', padding='same'))
model.add(LocalResponseNormalization(input_shape=model.output_shape[1:]))
model.add(MaxPooling2D(pool_size=(33), strides=2))
model.add(Conv2D(384, (33), activation='relu', padding='same'))
model.add(LocalResponseNormalization(input_shape=model.output_shape[1:]))
model.add(MaxPooling2D(pool_size=(33), strides=2))
model.add(Conv2D(384, (33), activation='relu', padding='same'))
model.add(Conv2D(256, (33), activation='relu', padding='same'))
model.add(MaxPooling2D(pool_size=(33), strides=2))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1000, activation='softmax'))
optimizer = optimizers.SGD(lr=0.01, decay=5e-5, momentum=0.9)
model.compile(loss='categorical_crossentropy',
              optimizer=optimizer, metrics=['accuracy'])
model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_6 (Conv2D)            (None, 575796)        34944     
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 5757256)       614656    
_________________________________________________________________
local_response_normalization (None, 5757256)       0         
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 2828256)       0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 2828384)       885120    
_________________________________________________________________
local_response_normalization (None, 2828384)       0         
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 1313384)       0         
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 1313384)       1327488   
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 1313256)       884992    
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 66256)         0         
_________________________________________________________________
flatten_2 (Flatten)          (None, 9216)              0         
_________________________________________________________________
dense_4 (Dense)              (None, 4096)              37752832  
_________________________________________________________________
dropout_3 (Dropout)          (None, 4096)              0         
_________________________________________________________________
dense_5 (Dense)              (None, 4096)              16781312  
_________________________________________________________________
dropout_4 (Dropout)          (None, 4096)              0         
_________________________________________________________________
dense_6 (Dense)              (None, 1000)              4097000   
=================================================================
Total params: 62,378,344
Trainable params: 62,378,344
Non-trainable params: 0
_________________________________________________________________
---------------------------- Pytorch ---------------------------
Cifar-10 데이터를 AlexNet모델 + Adam Optimizer + CrossEntropyLoss 를 통해 분류
import torch
import torch.nn as nn
from torchvision import datasets,transforms
import torch.optim as optim
from torchsummary import summary
transform = transforms.Compose(
    [transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.50.50.5), (0.50.50.5))])
training_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transformer)
test_dataset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transformer)
training_loader = torch.utils.data.DataLoader(dataset=training_dataset, batch_size=100, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=100, shuffle=False)
Files already downloaded and verified
Files already downloaded and verified
class AlexNet(nn.Module):
    def __init__(self, num_classes=10):
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(364, kernel_size=3, stride=1, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(64192, kernel_size=3, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=2),
            nn.Conv2d(192384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2)
        )
        self.fc_layers = nn.Sequential(
            nn.Dropout(0.6),
            nn.Linear(40962048),
            nn.ReLU(inplace=True),
            nn.Dropout(0.6),
            nn.Linear(20482048),
            nn.ReLU(inplace=True),
            nn.Linear(2048, num_classes),
        )
    def forward(self, x):
        conv_features = self.features(x)
        flatten = conv_features.view(conv_features.size(0), -1)
        fc = self.fc_layers(flatten)
        return fc
epochs = 20
batch_size = 128
log_batch = 200
train_list = []
test_list = []
model = AlexNet()
model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)
# model summary
summary(model,(3,32,32))
----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1           [-1643838]           1,792
              ReLU-2           [-1643838]               0
         MaxPool2d-3           [-1641919]               0
            Conv2d-4          [-11922121]         110,784
              ReLU-5          [-11922121]               0
         MaxPool2d-6          [-11921010]               0
            Conv2d-7          [-13841010]         663,936
              ReLU-8          [-13841010]               0
            Conv2d-9          [-12561010]         884,992
             ReLU-10          [-12561010]               0
           Conv2d-11          [-12561010]         590,080
             ReLU-12          [-12561010]               0
        MaxPool2d-13            [-125644]               0
          Dropout-14                 [-14096]               0
           Linear-15                 [-12048]       8,390,656
             ReLU-16                 [-12048]               0
          Dropout-17                 [-12048]               0
           Linear-18                 [-12048]       4,196,352
             ReLU-19                 [-12048]               0
           Linear-20                   [-110]          20,490
================================================================
Total params: 14,859,082
Trainable params: 14,859,082
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.01
Forward/backward pass size (MB): 4.53
Params size (MB): 56.68
Estimated Total Size (MB): 61.23
----------------------------------------------------------------
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
import time
for epoch in range(epochs):
        running_loss = 0.0
        correct_classified = 0
        total = 0
        start_time = time.time()
        for i, data in enumerate(training_loader):
            inputs, labels = data
            inputs, labels = inputs.to(device), labels.to(device)
            optimizer.zero_grad()
            outputs = model(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct_classified += (predicted == labels).sum().item()
            running_loss += loss.item()
            if i % log_batch == log_batch - 1:
                avg_loss = running_loss / log_batch
                print('Epoch: %d/%d Batch: %5d loss: %.3f' % (epoch + 1, epochs, i + 1, avg_loss))
                running_loss = 0.0
        print("Time/epoch: {} sec".format(time.time() - start_time))
        train_acc = (100 * correct_classified / total)
        train_list.append(train_acc)
        print('Train accuracy : %d %%' % train_acc)
        torch.save(net.state_dict(), "model.h5"# 모델을 저장
        correct_classified = 0
        total = 0
        with torch.no_grad():
            for data in test_loader:
                images, labels = data
                inputs, labels = images.to(device), labels.to(device)
                outputs = net(inputs)
                _, predicted = torch.max(outputs.data, 1)
                total += labels.size(0)
                correct_classified += (predicted == labels).sum().item()
            test_acc = (100 * correct_classified / total)
            test_list.append(test_acc)
            print('Test accuracy : %d %%' % test_acc)
  
colab에서 돌린 결과값
# Epoch: 1/20 Batch:   200 loss: 1.271
# Epoch: 1/20 Batch:   400 loss: 1.176
# Time/epoch: 51.72108054161072 sec
# Train accuracy of the network images: 56 %
# Test accuracy of the network: 58 %
# Epoch: 2/20 Batch:   200 loss: 1.048
# Epoch: 2/20 Batch:   400 loss: 1.004
# Time/epoch: 51.59315204620361 sec
# Train accuracy of the network images: 64 %
# Test accuracy of the network: 64 %
# Epoch: 3/20 Batch:   200 loss: 0.903
# Epoch: 3/20 Batch:   400 loss: 0.888
# Time/epoch: 51.604798316955566 sec
# Train accuracy of the network images: 68 %
# Test accuracy of the network: 68 %
# Epoch: 4/20 Batch:   200 loss: 0.780
# Epoch: 4/20 Batch:   400 loss: 0.809
# Time/epoch: 51.63756847381592 sec
# Train accuracy of the network images: 72 %
# Test accuracy of the network: 70 %
# Epoch: 5/20 Batch:   200 loss: 0.712
# Epoch: 5/20 Batch:   400 loss: 0.720
# Time/epoch: 51.69989371299744 sec
# Train accuracy of the network images: 75 %
# Test accuracy of the network: 71 %
# Epoch: 6/20 Batch:   200 loss: 0.637
# Epoch: 6/20 Batch:   400 loss: 0.666
# Time/epoch: 51.617228746414185 sec
# Train accuracy of the network images: 77 %
# Test accuracy of the network: 72 %
# Epoch: 7/20 Batch:   200 loss: 0.592
# Epoch: 7/20 Batch:   400 loss: 0.610
# Time/epoch: 51.64090609550476 sec
# Train accuracy of the network images: 79 %
# Test accuracy of the network: 74 %
# Epoch: 8/20 Batch:   200 loss: 0.547
# Epoch: 8/20 Batch:   400 loss: 0.561
# Time/epoch: 51.69233179092407 sec
# Train accuracy of the network images: 80 %
# Test accuracy of the network: 75 %
# Epoch: 9/20 Batch:   200 loss: 0.486
# Epoch: 9/20 Batch:   400 loss: 0.519
# Time/epoch: 51.62518811225891 sec
# Train accuracy of the network images: 82 %
# Test accuracy of the network: 74 %
# Epoch: 10/20 Batch:   200 loss: 0.458
# Epoch: 10/20 Batch:   400 loss: 0.494
# Time/epoch: 51.65696334838867 sec
# Train accuracy of the network images: 83 %
# Test accuracy of the network: 75 %
# Epoch: 11/20 Batch:   200 loss: 0.413
# Epoch: 11/20 Batch:   400 loss: 0.458
# Time/epoch: 51.61623287200928 sec
# Train accuracy of the network images: 84 %
# Test accuracy of the network: 75 %
# Epoch: 12/20 Batch:   200 loss: 0.407
# Epoch: 12/20 Batch:   400 loss: 0.427
# Time/epoch: 51.5536003112793 sec
# Train accuracy of the network images: 85 %
# Test accuracy of the network: 75 %
# Epoch: 13/20 Batch:   200 loss: 0.370
# Epoch: 13/20 Batch:   400 loss: 0.391
# Time/epoch: 51.65504288673401 sec
# Train accuracy of the network images: 86 %
# Test accuracy of the network: 75 %
# Epoch: 14/20 Batch:   200 loss: 0.353
# Epoch: 14/20 Batch:   400 loss: 0.377
# Time/epoch: 51.59739279747009 sec
# Train accuracy of the network images: 87 %
# Test accuracy of the network: 76 %
# Epoch: 15/20 Batch:   200 loss: 0.324
# Epoch: 15/20 Batch:   400 loss: 0.352
# Time/epoch: 51.5103600025177 sec
# Train accuracy of the network images: 88 %
# Test accuracy of the network: 76 %
# Epoch: 16/20 Batch:   200 loss: 0.292
# Epoch: 16/20 Batch:   400 loss: 0.348
# Time/epoch: 51.63554072380066 sec
# Train accuracy of the network images: 88 %
# Test accuracy of the network: 75 %
# Epoch: 17/20 Batch:   200 loss: 0.287
# Epoch: 17/20 Batch:   400 loss: 0.321
# Time/epoch: 51.56595015525818 sec
# Train accuracy of the network images: 89 %
# Test accuracy of the network: 76 %
# Epoch: 18/20 Batch:   200 loss: 0.273
# Epoch: 18/20 Batch:   400 loss: 0.293
# Time/epoch: 51.497596979141235 sec
# Train accuracy of the network images: 90 %
# Test accuracy of the network: 76 %
# Epoch: 19/20 Batch:   200 loss: 0.252
# Epoch: 19/20 Batch:   400 loss: 0.285
# Time/epoch: 51.631884813308716 sec
# Train accuracy of the network images: 90 %
# Test accuracy of the network: 76 %
# Epoch: 20/20 Batch:   200 loss: 0.245
# Epoch: 20/20 Batch:   400 loss: 0.265
# Time/epoch: 51.55575180053711 sec
# Train accuracy of the network images: 91 %
# Test accuracy of the network: 75 %
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format='retina'
import matplotlib.pyplot as plt
plt.plot(train_list, label='Train ACC')
plt.plot(test_list, label='Test ACC')
plt.legend(frameon=False)
plt.show()
그래프로 표현했을 때 Train Accuracy는 계속 증가하지만 Test Accuracy는 75%에서 멈춘것을 봐서 overfitting 되어서 75%에서 증가하지않을 것을 알 수 있다.
 
cs

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 우수 코드 게시판 이용 관련 공지사항 DataMarket 2014.05.21 43164
187 투빅스 11기&12기 9주차 CNN심화(1) - 12기 김주호 file 김주호 2019.09.25 1225
186 투빅스 11기&12기 9주차 CNN심화(2) - 12기 김태한 file 12기김태한 2019.09.25 878
185 투빅스 11기&12기 8주차 CNN심화(3) - 12기 배유나 file 배유나 2019.09.24 981
184 투빅스 11기&12기 8주차 CNN심화(4) - 12기 배유나 file 배유나 2019.09.24 977
» 투빅스 11기&12기 8주차 CNN - 12기 박재민 jaemin0095 2019.09.23 913
182 투빅스 11기&12기 8주차 NLP기초 - 12기 박진혁 file 박진혁 2019.09.21 947
181 투빅스 11기&12기 8주차 NLP - 12기 김주호 file 김주호 2019.09.20 857
180 투빅스 11기&12기 7주차 알고리즘(1) - 12기 김탁영 file 2019.09.19 888
179 투빅스 11기&12기 7주차 알고리즘(2) - 김효은 file 김효은 2019.09.17 836
178 투빅스 11기&12기 7주차 프레임워크(PyTorch) - 12기 신윤종 file yj 2019.09.16 889
177 투빅스 11기&12기 6주차 크롤링 - 이유진 yooj_lee 2019.09.04 874
176 투빅스 11기&12기 6주차 크롤링 - 12기 신윤종 file yj 2019.08.31 811
175 투빅스 11기&12기 6주차 크롤링 - 12기 김주호 file 김주호 2019.08.31 861
174 투빅스 11기&12기 5주차 알고리즘 - 12기 김탁영 2019.08.29 856
173 투빅스 11기&12기 5주차 SVM - 12기 이홍정 올타임넘버원메시 2019.08.27 896
172 투빅스 11기&12기 5주차 PCA - 12기 김태한 file 12기김태한 2019.08.27 927
171 투빅스 11기&12기 4주차 Ensemble - 12기 배유나 배유나 2019.08.26 892
170 투빅스 11기&12기 5주차 Class - 12기 이세윤 세윤 2019.08.26 825
169 투빅스 11기&12기 3주차 Naive bayes - 12기 김태한 12기김태한 2019.08.19 849
168 투빅스 11기&12기 4주차 Clustering - 12기 신윤종 file yj 2019.08.17 867
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 ... 10 Next ›
/ 10

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5