6.2. Phép Tích Chập Cho Ảnh

6.2.4. Học một Bộ lọc¶

Việc thiết kế bộ phát hiện biên bằng sai phân hữu hạn [1, -1] thì khá gọn gàng nếu ta biết chính xác đây là những gì cần làm. Tuy nhiên, khi xét tới các bộ lọc lớn hơn và các tầng tích chập liên tiếp, việc chỉ định chính xác mỗi bộ lọc cần làm gì một cách thủ công là bất khả thi.

Bây giờ ta hãy xem liệu có thể học một bộ lọc có khả năng tạo ra Y từX chỉ từ các cặp (đầu vào, đầu ra) hay không. Đầu tiên chúng ta xây dựng một tầng tích chập và khởi tạo một mảng ngẫu nhiên làm bộ lọc. Tiếp theo, trong mỗi lần lặp, ta sẽ sử dụng bình phương sai số để so sánh Y và đầu ra của tầng tích chập, sau đó tính toán gradient để cập nhật trọng số. Để đơn giản, trong tầng tích chập này, ta sẽ bỏ qua hệ số điều chỉnh.

Trước đây ta đã tự xây dựng lớp Conv2D. Tuy nhiên, do ta sử dụng các phép gán một phần tử, Gluon sẽ gặp một số khó khăn khi tính gradient. Thay vào đó, ta sử dụng lớp Conv2D có sẵn của Gluon như sau.

# Construct a convolutional layer with 1 output channel # (channels will be introduced in the following section) # and a kernel array shape of (1, 2) conv2d = nn.Conv2D(1, kernel_size=(1, 2)) conv2d.initialize() # The two-dimensional convolutional layer uses four-dimensional input and # output in the format of (example, channel, height, width), where the batch # size (number of examples in the batch) and the number of channels are both 1 X = X.reshape(1, 1, 6, 8) Y = Y.reshape(1, 1, 6, 7) for i in range(10): with autograd.record(): Y_hat = conv2d(X) l = (Y_hat - Y) ** 2 l.backward() # For the sake of simplicity, we ignore the bias here conv2d.weight.data()[:] -= 3e-2 * conv2d.weight.grad() if (i + 1) % 2 == 0: print('batch %d, loss %.3f' % (i + 1, l.sum())) batch 2, loss 4.949 batch 4, loss 0.831 batch 6, loss 0.140 batch 8, loss 0.024 batch 10, loss 0.004

Có thể thấy sai số đã giảm xuống còn khá nhỏ sau 10 lần lặp. Bây giờ hãy xem mảng bộ lọc đã học được.

conv2d.weight.data().reshape(1, 2) array([[ 0.9895 , -0.9873705]])

Thật vậy, mảng bộ lọc học được rất gần với mảng bộ lọc K mà ta tự định nghĩa trước đó.

Từ khóa » Tích Chập Ma Trận