Phân lớp tuyến tính với Python
Ở bài trước, chúng ta đã tìm hiểu về Parameterized Learning và phân lớp tuyến tính. Ở bài này chúng ta sẽ thực hiên motoh phân lớp tuyến tính sử dụng Python. Mục đích của ví dụ này không phải là để chứng minh cách chúng ta đào tạo một mô hình từ đầu đến cuối, mà đơn giản chỉ ra cách chúng ta sẽ khởi tạo một ma trận trọng số W, và sau đó sử dụng các tham số này để phân loại hình ảnh thông qua một sản phẩm chấm đơn giản.
Mục tiêu của chúng tôi ở đây là viết Python sẽ phân loại chính xác một hình ảnh có chứa con chó nào không.
import cv2
import numpy as np
labels = ['dog', 'cat', 'panda']
np.random.seed(2)
W = np.random.randn(3, 3072)
b = np.random.randn(3)
origin = cv2.imread('beagle.png')
image = cv2.resize(origin, (32, 32)).flatten()
scores = W.dot(image) + b
for score, label in zip(scores, labels):
print(f'[INFO] {label}: {score:.2f}')
cv2.putText(origin, f'Label: {labels[np.argmax(scores)]}',
(10, 30), cv2.FONT_HERSHEY_COMPLEX, 0.9, (0, 255, 0), 2)
cv2.imshow('Image', origin)
cv2.waitKey(0)
Lưu ý cách lớp "chó" có giá trị ghi điểm lớn nhất, hàm ý rằng lớp chó sẽ được chọn làm dự đoán của phân loại của chúng tôi. Trong thực tế, chúng ta có thể nhìn thấy con chó văn bản chính xác
được vẽ trên hình ảnh đầu vào của chúng tôi trong hình bên dưới.
Một lần nữa, hãy nhớ rằng đây là một ví dụ hoạt động. Chúng ta cố tình thiết lập trạng thái ngẫu nhiên của chúng ta. Tập lệnh Python để tạo các giá trị W và b sẽ dẫn đến phân loại chính xác (bạn có thể thay đổi giá trị để tự mình thấy cách khởi tạo ngẫu nhiên khác nhau sẽ tạo ra các dự đoán đầu ra khác nhau).
Trong thực tế, bạn sẽ không bao giờ khởi tạo các giá trị W và b của mình và cho rằng chúng sẽ cung cấp cho bạn phân loại chính xác mà không có một số loại quá trình học tập. Thay vào đó, khi đào tạo máy của chúng ta học các mô hình từ đầu, chúng ta sẽ cần tối ưu hóa và học W và b thông qua tối ưu hóa thuật toán, chẳng hạn như gradient descent.
Chúng ta sẽ thảo luận tối ưu hóa và gradient descent trong cacs baif tiếp theo, nhưng trong khi đó, chỉ đơn giản là dành thời gian để đảm bảo phân loại tuyến tính tạo phân loại bằng cách lấy dit product giữa ma trận trọng số và điểm dữ liệu đầu vào, sau đó thêm vào bias. Do đó, toàn bộ mô hình của chúng tôi có thể được xác định thông qua hai giá trị: ma trận trọng số và độ lệch
vectơ. Đại diện này không chỉ nhỏ gọn mà còn khá mạnh mẽ khi chúng tôi đào tạo máy
mô hình học tập từ đầu.
Kết luận
Chúng ta đã viết những đoạn code đầu tiên để huấn luyện trong Python. Trong những bài tiếp theo, chúng ta sẽ tìm hiểu sâu về cách tối ưu hóa ma trận trọng số để chúng có thể học dựa trên dữ liệu đầu vào
Chúc bạn thành đạt trong công việc và hạnh phúc trong cuộc sống !
Hotline / Zalo: 0903 666 014
Website: https://uniduc.com/vi
-------------////--------------------------------------------////------------
HUMANOID ROBOT CỦA CÔNG TY UNIDUC SẢN XUẤT PHÁT TRIỂN.