Tôi sẽ giả định bởi C1
, C2
, vv, bạn có nghĩa là lớp xoắn, và bằng cách P1
, P2
bạn có nghĩa là lớp tổng hợp, và FC
phương tiện kết nối hoàn toàn lớp.
Chúng ta có thể tính toán bộ nhớ cần thiết cho một lần chuyển tiếp như thế này:
Một hình ảnh
Nếu bạn đang làm việc với các giá trị float32, thì hãy theo liên kết được cung cấp ở trên bởi @Alexandru Burlacu mà bạn có:
Input
: 50x50x3 = 7.500 = 7.5K
C1
: 50x50x32 = 80.000 = 80K
P1
: 25x25x32 = 20.000 = 20K
C2
: 25x25x64 = 40.000 = 40K
P2
: 12x12x64 = 9,216 = 9,2K <- Đây là một vấn đề (và gần đúng của tôi là một phỏng đoán rất lượn sóng ở đây). Thay vì làm việc với 50, 25, '12 .5 ', sẽ hợp lý hơn khi làm việc với bội số 32. Tôi đã nghe nói làm việc với bội số 32 cũng hiệu quả hơn từ quan điểm bộ nhớ. Lý do đây là một ý tưởng tồi là nhóm 2x2 không phân chia không gian hợp lý, theo như tôi có thể nói. Hãy sửa tôi nếu tôi sai.
FC
: 1x500 = 500 = 0,5K
Output
: 1 x 10 = 10 = 0,01K (không có gì)
Tổng bộ nhớ: 7.5K + 80K + 20K + 40K + 0.5K = 157.2K * 4 byte = 628.8 KB
Đó là cho một hình ảnh.
Minibatch
Nếu bạn đang làm việc với kích thước nhỏ gọn là 64, thì bạn đang đọc 64 trong số này vào bộ nhớ cùng một lúc và thực hiện tất cả các thao tác cùng nhau, nhân rộng mọi thứ như thế này:
Input
: 64x50x50x3 = 480.000 = 480K = 0,48M
C1
: 64x50x50x32 = 5.120.000 = 5.12M
P1
: 64x25x25x32 = 1.280.000 = 1.28M
C2
: 64x25x25x64 = 2.560.000 = 2.56M
P2
: 64x12x12x64 = 589.824 = 590K = 0,59M
FC
: 64x500 = 32.000 = 32K = 0,032M
Output
: 1x10x64 = 640 = 0,64K = 0,00064M (chúng tôi không quan tâm, điều này rất nhỏ)
Tổng bộ nhớ: 10M x 4 byte ~ 40MB (Tôi đang nói gần đúng vì trang web cũng cho biết giá trị gần đúng)
EDIT: Tôi đọc sai trang web, xin lỗi.
Theo trang web, một đường chuyền ngược đòi hỏi khoảng gấp ba lần này, vì nhu cầu lưu trữ:
các kích hoạt và độ dốc liên quan cho mỗi nơ ron - chúng có kích thước bằng nhau;
độ dốc của các trọng số (tham số) có cùng kích thước với các tham số;
giá trị của động lượng, nếu bạn đang sử dụng nó;
một số loại bộ nhớ linh tinh (tôi không hiểu phần này)
C1
ở trên bạn có50x50x32
nhưng đó sẽ chỉ là các giá trị cho các bản đồ kích hoạt lớp, còn các giá trị đã học (32x3x3
) trong chính hạt nhân thì sao?