Bài 10: Convolutional Neural Network ( CNN ) – Pytorch Cơ bản

Trang chủ » Training » Bài 10: Convolutional Neural Network ( CNN ) – Pytorch Cơ bản
24/02/2022 Training 61 viewed
Học sâu là một phần của học máy và được các nhà nghiên cứu coi là một bước tiến quan trọng trong những thập kỷ gần đây. Các ví dụ về triển khai học sâu bao gồm các ứng dụng như nhận dạng hình ảnh và nhận dạng giọng nói.
Hai loại mạng nơ ron sâu quan trọng bao gồm:
  • Convolutional Neural Networks ( CNN )
  • Recurrent Neural Networks. ( RNN )
Trong bài này, ta sẽ tập trung vào mạng CNN

1. Convolutional Neural Networks

Mạng Neural Convolutions được thiết kế để xử lý dữ liệu thông qua nhiều lớp mảng. Loại mạng thần kinh này được sử dụng trong các ứng dụng như nhận dạng hình ảnh hoặc nhận dạng khuôn mặt.
Sự khác biệt cơ bản giữa CNN và bất kỳ mạng nơ-ron thông thường nào khác là CNN nhận đầu vào là một mảng hai chiều và hoạt động trực tiếp trên hình ảnh thay vì tập trung vào việc trích xuất tính năng mà các mạng nơ-ron khác tập trung vào.
Cách tiếp cận chủ đạo của CNN bao gồm giải pháp cho các vấn đề về nhận dạng. Các công ty hàng đầu như Google và Facebook đã đầu tư vào các dự án nghiên cứu và phát triển các dự án công nhận để hoàn thành các hoạt động với tốc độ nhanh hơn.
Mỗi mạng nơ-ron tích tụ bao gồm ba ý tưởng cơ bản:
  • Local respective fields
  • Convolution
  • Pooling
a. Local Respective Fields
CNN sử dụng các mối tương quan không gian tồn tại trong dữ liệu đầu vào. Mỗi trong các lớp đồng thời của mạng nơ-ron kết nối một số nơ-ron đầu vào. Vùng cụ thể này được gọi là Trường tiếp nhận cục bộ( Local Receptive Field ). Nó chỉ tập trung vào các tế bào thần kinh ẩn ( hidden neurons ). Nơron ẩn (hidden neuron) sẽ xử lý dữ liệu đầu vào bên trong trường được đề cập mà không nhận ra những thay đổi bên ngoài ranh giới cụ thể.
Biểu đồ biểu diễn tạo các trường tương ứng cục bộ được đề cập dưới đây:
b. Convolution ( Tích chập )
Trong hình trên, ta quan sát thấy rằng mỗi kết nối học một trọng số của nơ-ron ẩn với mối liên hệ liên kết với sự chuyển động từ lớp này sang lớp khác. Tại đây, các tế bào thần kinh riêng lẻ thực hiện sự thay đổi theo thời gian. Quá trình này được gọi là “tích chập”.
Ánh xạ các kết nối từ lớp đầu vào đến bản đồ đối tượng ẩn được định nghĩa là “shared weights” và bias được gọi là “shared bias”.
c. Pooling
CNN sử dụng các lớp tổng hợp được định vị ngay sau khi CNN khai báo. Nó lấy thông tin đầu vào từ người dùng dưới dạng feature map tạo ra các mạng convolutional và chuẩn bị một feature map cô đọng. Việc gộp các lớp giúp tạo các lớp với các tế bào thần kinh của các lớp trước.

2. Triển khai PyTorch

Các bước sau được sử dụng để tạo CNN bằng PyTorch.
Bước 1
from torch.autograd import Variable
import torch.nn.functional as F
Bước 2
Tạo một lớp với batch của CNN. batch shape cho đầu vào x có kích thước là (3, 32, 32).
class SimpleCNN(torch.nn.Module):
   def __init__(self):
      super(SimpleCNN, self).__init__()
      #Input channels = 3, output channels = 18
      self.conv1 = torch.nn.Conv2d(3, 18, kernel_size = 3, stride = 1, padding = 1)
      self.pool = torch.nn.MaxPool2d(kernel_size = 2, stride = 2, padding = 0)
      #4608 input features, 64 output features (see sizing flow below)
      self.fc1 = torch.nn.Linear(18 * 16 * 16, 64)
      #64 input features, 10 output features for our 10 defined classes
      self.fc2 = torch.nn.Linear(64, 10)

Bước 3 :

Tính toán thay đổi kích thước tích chập đầu tiên từ (3, 32, 32) thành (18, 32, 32).
Kích thước của thứ nguyên thay đổi từ (18, 32, 32) thành (18, 16, 16). Reshape lại kích thước dữ liệu của lớp đầu vào của mạng thần kinh do kích thước thay đổi từ (18, 16, 16) thành (1, 4608).
Nhớ rằng -1 suy ra thứ nguyên này từ thứ nguyên khác đã cho.
def forward(self, x):
   x = F.relu(self.conv1(x))
   x = self.pool(x)
   x = x.view(-1, 18 * 16 *16)
   x = F.relu(self.fc1(x))
   #Computes the second fully connected layer (activation applied later)
   #Size changes from (1, 64) to (1, 10)
   x = self.fc2(x)
   return(x)
Chia sẻ:
Tags:
TOP HOME