Đạo hàm thời gian trong Python
Đạo hàm là một trong những khái niệm cơ bản nhất trong giải tích. Chúng mô tả những thay đổi trong biến đầu vào ảnh hưởng như thế nào đến đầu ra của chức năng. Mục tiêu của bài viết này là cung cấp phần giới thiệu cấp cao về tính toán đạo hàm trong PyTorch cho những người mới sử dụng khuôn khổ này. PyTorch cung cấp một cách thuận tiện để tính đạo hàm cho các hàm do người dùng định nghĩa Show Trong khi chúng ta luôn phải xử lý backpropagation (một thuật toán được biết đến là xương sống của mạng nơ-ron) trong mạng nơ-ron, giúp tối ưu hóa các tham số để giảm thiểu lỗi nhằm đạt được độ chính xác phân loại cao hơn; Sau khi xem qua hướng dẫn này, bạn sẽ học được
Bắt đầu nào Tính toán đạo hàm trong PyTorch Sự khác biệt trong AutogradAutograd – mô-đun phân biệt tự động trong PyTorch – được sử dụng để tính toán đạo hàm và tối ưu hóa các tham số trong mạng thần kinh. Nó chủ yếu dành cho tính toán gradient Trước khi bắt đầu, hãy tải lên một số thư viện cần thiết mà chúng ta sẽ sử dụng trong hướng dẫn này 1 2 nhập matplotlib. pyplot as plt nhập đuốc Bây giờ, hãy sử dụng một tensor đơn giản và đặt tham số 1 2 x = ngọn đuốc. tensor(3. 0, requires_grad = True) print("tạo một tensor x. ", x) 1 tạo ra một tensor x. tenxơ(3. , yêu cầu_grad=True) Chúng ta sẽ sử dụng một phương trình đơn giản $y=3x^2$ làm ví dụ và lấy đạo hàm đối với biến 1 2 3 4 y = 3 * x ** 2 in("Kết quả của phương trình là. ", y) y. lùi lại() in("Đạo hàm của phương trình tại x = 3 là. ", x. grad) 1 2 Result of the equation is: tensor(27., grad_fn= Đạo hàm của phương trình tại x = 3 là. tenxơ(18. ) Như bạn có thể thấy, chúng tôi đã nhận được giá trị là 18, giá trị này đúng đồ thị tính toánPyTorch tạo ra các dẫn xuất bằng cách xây dựng một biểu đồ ngược đằng sau hậu trường, trong khi các hàm tensor và ngược là các nút của biểu đồ. Trong biểu đồ, PyTorch tính toán đạo hàm của một tenxơ tùy thuộc vào việc nó có phải là lá hay không PyTorch sẽ không đánh giá đạo hàm của tensor nếu thuộc tính leaf của nó được đặt thành True. Chúng tôi sẽ không đi sâu vào chi tiết về cách tạo và sử dụng biểu đồ ngược, bởi vì mục tiêu ở đây là cung cấp cho bạn kiến thức cấp cao về cách PyTorch sử dụng biểu đồ để tính đạo hàm Vì vậy, hãy kiểm tra xem các tenxơ 1 2 3 4 5 in('thuộc tính dữ liệu của tensor. ',x. dữ liệu) in('grad thuộc tính của tenxơ. ',x. grad) print(thuộc tính 'grad_fn của tensor. ',x. grad_fn) in("thuộc tính is_leaf của tensor. ",x. is_leaf) print("requires_grad thuộc tính của tensor. ",x. requires_grad) 1 2 3 4 5 thuộc tính dữ liệu của tensor. tenxơ(3. ) thuộc tính grad của tensor. tenxơ(18. ) thuộc tính grad_fn của tensor. Không có thuộc tính is_leaf của tensor. Thật thuộc tính require_grad của tensor. Thật và cho 1 2 3 4 5 in('thuộc tính dữ liệu của tensor. ',y. dữ liệu) in('grad thuộc tính của tenxơ. ',y. grad) print(thuộc tính 'grad_fn của tensor. ',y. grad_fn) in("thuộc tính is_leaf của tensor. ",y. is_leaf) print("requires_grad thuộc tính của tensor. ",y. requires_grad) 1 2 3 4 5 print('thuộc tính dữ liệu của tensor. ',y. dữ liệu) print('thuộc tính grad của tensor. ',y. tốt nghiệp) print('grad_fn thuộc tính của tensor. ',y. grad_fn) print("thuộc tính is_leaf của tensor. ",y. is_leaf) print("thuộc tính request_grad của tensor. ",y. yêu cầu_grad) Như bạn có thể thấy, mỗi tensor đã được gán với một bộ thuộc tính cụ thể Thuộc tính $$\frac{dy}{dx} = 12x+2$$ Đánh giá đạo hàm tại $x = 3$, $$\left. \frac{dy}{dx}\right\vert_{x=3} = 12\times 3+2 = 38$$ Bây giờ, hãy xem PyTorch làm điều đó như thế nào, 1 2 3 4 5 x = ngọn đuốc. tensor(3. 0, requires_grad = True) y = 6 * x ** 2 + 2 * x + 4 in("Kết quả của phương trình là. ", y) y. lùi lại() in("Đạo hàm của phương trình tại x = 3 là. ", x. grad) 1 2 Result of the equation is: tensor(64., grad_fn= Đạo hàm của phương trình tại x = 3 là. tenxơ(38. ) Đạo hàm của phương trình là 38, đúng Triển khai đạo hàm riêng của hàmPyTorch cũng cho phép chúng ta tính đạo hàm riêng của các hàm. Ví dụ: nếu chúng ta phải áp dụng đạo hàm riêng cho hàm sau, $$f(u,v) = u^3+v^2+4uv$$ Đạo hàm của nó đối với $u$ là, $$\frac{\partial f}{\partial u} = 3u^2 + 4v$$ Tương tự, đạo hàm đối với $v$ sẽ là, $$\frac{\partial f}{\partial v} = 2v + 4u$$ Bây giờ, hãy thực hiện theo cách của PyTorch, trong đó $u = 3$ và $v = 4$ Chúng ta sẽ tạo các tenxơ 1 2 3 4 5 6 7 8 9 10 11 12 u = ngọn đuốc. tensor(3. , requires_grad=True) v = ngọn đuốc. tensor(4. , requires_grad=True)
f = u**3 + v**2 + 4*u*v
in(u) in(v) in(f)
f. lùi lại() in("Đạo hàm riêng theo u. ", u. grad) in("Đạo hàm riêng theo v. ", v. grad) 1 2 3 4 5 tenxơ(3. , yêu cầu_grad=True) tenxơ(4. , yêu cầu_grad=True) tensor(91., grad_fn= đạo hàm riêng theo u. tenxơ(43. ) đạo hàm riêng theo v. tenxơ(20. ) Đạo hàm của các hàm có nhiều giá trịĐiều gì sẽ xảy ra nếu chúng ta có một hàm có nhiều giá trị và chúng ta cần tính đạo hàm đối với nhiều giá trị của nó? . Đây là cách chúng ta có thể thấy 'hàm so với. đồ thị phái sinh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # tính đạo hàm của hàm nhiều giá trị x = ngọn đuốc. linspace(-20, 20, 20, requires_grad = True) Y = x ** 2 y = ngọn đuốc. tổng(Y) y. lùi lại()
# vẽ đồ thị hàm số và đạo hàm function_line, = plt. âm mưu(x. tách(). numpy(), Y . .tách(). numpy(), nhãn = 'Function') function_line. set_color("đỏ") derivative_line, = plt. âm mưu(x. tách(). numpy(), x . .grad. tách(). numpy(), nhãn = 'Derivative') derivative_line. set_color("green") plt. xlabel('x') plt. chú thích() plt. hiển thị() Trong hai hàm |