CNN - Tính số tham số trong mỗi layer của model

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

Input image size: Assuming the input images are grayscale and have a size

of 28x28 pixels.

After the first convolutional layer (self.conv1):

Output channels: 32
Kernel size: 3x3
Stride: 1
Padding: 0 (default)
Output size = (input size - kernel size) / stride + 1 = (28 - 3) / 1 + 1 = 26
So, the feature map size after the first convolutional layer is 26x26x32.
After max pooling (F.max_pool2d(x, 2)):

Kernel size: 2x2


Stride: 2
Output size = (input size - kernel size) / stride + 1 = (26 - 2) / 2 + 1 = 13
So, the feature map size after max pooling is 13x13x32.

Kích thước hình ảnh đầu vào: Giả sử hình ảnh đầu vào có thang độ xám và
có kích thước 28x28 pixel.

Sau lớp chập đầu tiên (self.conv1):

Kênh đầu ra: 32


Kích thước hạt nhân: 3x3
Sải bước: 1
Đệm: 0 (mặc định)
Kích thước đầu ra = (kích thước đầu vào - kích thước hạt nhân) / sải chân + 1
= (28 - 3) / 1 + 1 = 26
Vì vậy, kích thước bản đồ đặc trưng sau lớp chập đầu tiên là 26x26x32.
Sau khi gộp tối đa (F.max_pool2d(x, 2)):

Kích thước hạt nhân: 2x2


Sải bước: 2
Kích thước đầu ra = (kích thước đầu vào - kích thước hạt nhân) / sải chân + 1
= (26 - 2) / 2 + 1 = 13
Vì vậy, kích thước bản đồ đặc trưng sau khi gộp tối đa là 13x13x32.

bjoyita.github.io/Tut6_params.html
deep learning - How to calculate the number of parameters for convolutional
neural network? - Stack Overflow
Counting No. of Parameters in Deep Learning Models by Hand | by Raimi
Karim | Towards Data Science
https://github.com/MrYxJ/calculate-flops.pytorch

Cách tính số lượng tham số có thể học được cho từng loại lớp riêng lẻ mà
bạn có, sau đó tính toán số lượng tham số trong ví dụ của bạn.
 Lớp đầu vào: Tất cả những gì lớp đầu vào làm là đọc hình ảnh đầu vào,
vì vậy không có tham số nào bạn có thể tìm hiểu ở đây.
 Các lớp tích chập: Hãy xem xét một lớp tích chập lấy bản đồ địa vật ở
đầu vào và có bản đồ địa vật làm đầu ra. Kích thước bộ lọc là x . Ví dụ:
điều này sẽ trông như thế này:l k n m

Ở đây, đầu vào có bản đồ tính năng làm đầu vào, bản đồ tính năng làm
đầu ra và kích thước bộ lọc là x. Điều quan trọng là phải hiểu rằng chúng
ta không chỉ đơn giản là có bộ lọc 3x3, mà thực sự là bộ lọc 3x3x32, vì
đầu vào của chúng ta có 32 chiều. Và chúng tôi tìm hiểu 64 bộ lọc
3x3x32 khác nhau. Do đó, tổng số trọng số là . Sau đó, cũng có một thuật
ngữ thiên vị cho mỗi bản đồ địa lý, vì vậy chúng ta có tổng số tham số
là .l=32 k=64 n=3 m=3 n*m*k*l (n*m*l+1)*k
 Các lớp gộp: Các lớp gộp, ví dụ: làm như sau: "thay thế một vùng lân
cận 2x2 bằng giá trị tối đa của nó". Vì vậy, không có tham số nào bạn có
thể học trong một lớp gộp.
 Các lớp được kết nối đầy đủ: Trong một lớp được kết nối đầy đủ, tất cả
các đơn vị đầu vào có trọng lượng riêng cho mỗi đơn vị đầu ra. Đối với
đầu vào và đầu ra, số lượng trọng số là . Ngoài ra, bạn có độ lệch cho mỗi
nút đầu ra, vì vậy bạn đang ở các tham số.n m n*m (n+1)*m
 Lớp đầu ra: Lớp đầu ra là một lớp được kết nối đầy đủ bình thường, vì
vậy các tham số, trong đó là số lượng đầu vào và là số lượng đầu ra.
(n+1)*m n m

Khó khăn cuối cùng là lớp được kết nối đầy đủ đầu tiên: chúng ta không biết
tính chiều của đầu vào cho lớp đó, vì nó là một lớp chập. Để tính toán nó, chúng
ta phải bắt đầu với kích thước của hình ảnh đầu vào và tính toán kích thước của
từng lớp tích chập. Trong trường hợp của bạn, Lasagne đã tính toán điều này
cho bạn và báo cáo kích thước - điều này giúp chúng tôi dễ dàng. Nếu bạn phải
tự tính toán kích thước của từng lớp, nó phức tạp hơn một chút:
 Trong trường hợp đơn giản nhất (như ví dụ của bạn), kích thước đầu ra
của lớp tích chập là , trong trường hợp của bạn: 28 - 4 = 24. Điều này là
do bản chất của tích chập: chúng tôi sử dụng ví dụ: vùng lân cận 5x5 để
tính điểm - nhưng hai hàng và cột ngoài cùng không có vùng lân cận 5x5,
vì vậy chúng tôi không thể tính toán bất kỳ đầu ra nào cho các điểm đó.
Đây là lý do tại sao đầu ra của chúng tôi nhỏ hơn 2 * 2 = 4 hàng / cột so
với đầu vào. input_size - (filter_size - 1)
 Nếu người ta không muốn đầu ra nhỏ hơn đầu vào, người ta có thể zero-
pad hình ảnh (với tham số của lớp tích chập trong Lasagne). Ví dụ: nếu
bạn thêm 2 hàng / cols số không xung quanh hình ảnh, kích thước đầu ra
sẽ là (28 + 4) -4 = 28. Vì vậy, trong trường hợp đệm, kích thước đầu ra
là .padinput_size + 2*padding - (filter_size -1)
 Nếu bạn rõ ràng muốn downsample hình ảnh của mình trong quá trình
tích chập, bạn có thể xác định sải chân, ví dụ: , có nghĩa là bạn di chuyển
bộ lọc theo các bước 2 pixel. Sau đó, biểu thức trở
thành .stride=2((input_size + 2*padding - filter_size)/stride) +1

Trong trường hợp của bạn, các tính toán đầy đủ là:

# name size parameters


--- -------- ------------------------- ------------------------
0 input 1x28x28 0
1 conv2d1 (28-(5-1))=24 -> 32x24x24 (5*5*1+1)*32 = 832
2 maxpool1 32x12x12 0
3 conv2d2 (12-(3-1))=10 -> 32x10x10 (3*3*32+1)*32 = 9'248
4 maxpool2 32x5x5 0
5 dense 256 (32*5*5+1)*256 = 205'056
6 output 10 (256+1)*10 = 2'570
Vì vậy, trong mạng của bạn, bạn có tổng cộng 832 + 9'248 + 205'056 + 2'570 =
217'706 tham số có thể học được, đó chính xác là những gì Lasagne báo cáo.

một số công thức cho mạng I-C-P-C-P-H-O (vì tôi đang làm việc trên một vấn
đề tương tự), chia sẻ nó trong hình dưới đây, có thể hữu ích.

Ngoài ra, (1) lớp tích chập với sải chân 2x2 và (2) lớp tích chập 1x1 sải + (tối đa
/ trung bình) gộp chung với sải chân 2x2, mỗi lớp đóng góp cùng một số tham
số với đệm 'giống nhau', như có thể thấy bên dưới:

You might also like