Ảnh của SpaceX trên Unsplash
Làm cho mã của bạn thực thi nhanh gọn bằng cách sử dụng vectơ hóa
Nội dung bài viết
Những gì bạn sẽ học:
- Vectorization là gì?
- Vectơ hóa quan trọng như thế nào trong Học máy?
- Ví dụ: Triển khai Vs Vs trực tuyến chưa được tiến hành
- Ưu điểm của việc triển khai Vectorized
- Trình diễn trên sổ ghi chép jupyter
Theo Giáo sư Andrew Ng :
“ Khả năng thực thi Vectơ hóa đã trở thành một kiến thức và kỹ năng quan trọng ”
Vì vậy, chúng ta hãy học kỹ năng này và đưa nó vào hộp công cụ của chúng tôi 🙂
Bạn đang đọc : Vectorization trong Machine Learning là gì ?
Vectorization là gì?
Vectorization là một kỹ thuật mà bạn hoàn toàn có thể làm cho mã của mình thực thi nhanh gọn. Đó là một cách rất mê hoặc và quan trọng để tối ưu hóa những thuật toán khi bạn đang tiến hành nó từ đầu .
Giờ đây, với sự trợ giúp của những thư viện đại số tuyến tính số được tối ưu hóa cao trong C / C + +, Octave / Matlab, Python, … vv. Chúng tôi hoàn toàn có thể làm cho mã của chúng tôi chạy hiệu quả .
Cảm ơn những người chuyên về tin học số !
Trong hướng dẫn này, tất cả chúng ta sẽ chơi với :
Numpy: Thư viện tính toán số nhanh bằng Python
Vectơ hóa quan trọng như thế nào trong Học máy?
Giống như trong quốc tế thực, chúng tôi chăm sóc đến việc xử lý bất kể loại yếu tố nào một cách hiệu suất cao theo cách sao cho lượng lỗi được giảm thiểu nhiều nhất hoàn toàn có thể .
Trong học máy, có một khái niệm về thuật toán tối ưu hóa nỗ lực giảm lỗi và giám sát để có được những thông số kỹ thuật tốt nhất cho quy mô học máy .
Vì vậy, bằng cách sử dụng tiến hành vector hóa trong một thuật toán tối ưu hóa, chúng tôi hoàn toàn có thể làm cho quy trình đo lường và thống kê nhanh hơn nhiều so với Thực hiện không được công nghệ hóa .
Một ví dụ cơ bản về Thuật toán tối ưu hóa: Gradient Descent
Ví dụ về cách hoạt động giải trí của Gradient Descent, Ảnh của Kevin Binz trên Nguồn
Bây giờ trước tiên chúng ta hãy chơi với Numpy để có một số ý tưởng về việc sử dụng thư viện máy tính được tối ưu hóa cao
So sánh hiệu suất giữa Danh sách Python và Mảng Numpy
Với Numpy: Thời gian có nghĩa là 1,52 ms cho mỗi vòng lặp
Không có Numpy: Thời gian có nghĩa là 69,9 ms cho mỗi vòng lặp
Mã:
Xem thêm : Nuanced là gì
# With Python Lists
a=list(range(1000000)) #10^6 numbers generated
%timeit [val + 5 for val in a] #Computing Element Wise Operation
# With Numpy Arrays
import numpy as np
a=np.array(a) #Converting into numpy array type
%timeit a+5
% timeit : Đây là một hàm ma thuật ipython có thể được sử dụng để bấm giờ cho một đoạn mã cụ thể.
Triển khai Vs Vectorized chưa được tiến hành
Hàm giả thuyết của hồi quy tuyến tính
Hãy hiểu khái niệm về vector sử dụng chức năng giả thuyết của hồi quy tuyến tính trong đó theta đại diện cho trọng lượng / hệ số và x đại diện cho các tính năng
Bây giờ có hai cách để tổng thể tất cả chúng ta trọn vẹn hoàn toàn có thể triển khai hàm trên :
- Sử dụng vòng lặp For
- Sử dụng Vectorization
n=10000
# Generate n random numbers between 0 - 1
theta = np.random.rand(n)
#Generate n random integers between 0 - 100
x = np.random.randint(0, 100, n)
Đối với thực thi Vectorized Loop Vs
Cả hai cách thực thi đều đáp ứng cho toàn bộ tất cả chúng ta cùng một đầu ra nhưng câu hỏi đặt ra là cách một người giám sát hiệu suất cao như thế nào ?
So sánh hiệu suất
So sánh hiệu suất giữa mã chưa được công nghệ hóa và mã vector hóa
Sử dụng mã chưa được tiến hành : Thời gian có nghĩa là 6,46 ms cho mỗi vòng lặp
Sử dụng mã Vectorized: Thời gian trung bình cho mỗi vòng lặp mất 18,8 µs
Mã:
# Unvectorized
def unvectorized(n, theta, x):
prediction= 0.0
for j in range(n):
prediction= prediction + theta[j]*x[j]
return prediction
# Vectorized
def vectorized(theta, x):
prediction= 0.0
prediction = np.dot(theta.transpose(), x)
return prediction
#Comparing Performance
%timeit unvectorized(n, theta, x)
%timeit vectorized(theta, x)
- Mã của chúng tôi chạy hiệu quả
- Mã của chúng tôi trở nên đơn giản hơn và dễ gỡ lỗi
Mã nguồn
Tất cả mã được sử dụng trong hướng dẫn này đều có sẵn trên thông tin tài khoản GitHub của tôi Nhấp vào đây
Ảnh của Emile Perron trên Unsplash
Phần kết luận
Trong hướng dẫn này, bạn đã học về kỹ thuật vectơ hóa, một trong những cách để làm cho mã của bạn hiệu suất cao .
Hẹn gặp lại những bạn trong bài hướng dẫn tiếp theo 🙂
Tiếp xúc
Gmail -> [ email protected ]
Github -> https://github.com/jalalmansoori19
Người giới thiệu
- https://speakerdeck.com/jakevdp/losing-your-loops-fast-numerical-computing-with-numpy-pycon-2015
- Khóa học Máy học trên Coursera của Giáo sư Andrew Ng
Source: https://swing.com.vn
Category: Wiki