PyTorch - Mạng Neural Hợp pháp
Học sâu là một bộ phận của học máy và được các nhà nghiên cứu coi là một bước 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 được đưa ra dưới đây:
- Mạng thần kinh chuyển đổi
- Mạng thần kinh định kỳ.
Trong chương này, chúng ta sẽ tập trung vào loại đầu tiên, tức là Mạng thần kinh chuyển đổi (CNN).
Mạng thần kinh chuyển đổi
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:
- Các trường tương ứng địa phương
- Convolution
- Pooling
Hãy để chúng tôi hiểu chi tiết từng thuật ngữ này.
Các trường phản hồi cục bộ
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 vớ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ộ. Nó chỉ tập trung vào các tế bào thần kinh ẩn. Nơron ẩn 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:
Convolution
Trong hình trên, chúng 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à "trọng số được chia sẻ" và thiên vị bao gồm được gọi là "thiên vị được chia sẻ".
Tổng hợp
Mạng nơron hợp pháp 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 bản đồ tính năng tạo ra các mạng phức hợp và chuẩn bị một bản đồ tính năng 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.
Triển khai PyTorch
Các bước sau được sử dụng để tạo Mạng nơ-ron liên kết bằng PyTorch.
Bước 1
Nhập các gói cần thiết để tạo một mạng nơ-ron đơn giản.
from torch.autograd import Variable
import torch.nn.functional as F
Bước 2
Tạo một lớp với đại diện hàng loạt của mạng nơ-ron tích tụ. Hình dạng lô của chúng tôi 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 kích hoạt 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). Định hình 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ớ lại 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)