sách gpt4 ăn đã đi

pytorch vô hiệu hóa/cho phép các hoạt động tính toán độ dốc cục bộ

In lại Tác giả: qq735679552 Thời gian cập nhật: 27-09-2022 22:32:09 33 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN pytorch cấm/cho phép các hoạt động tính toán gradient cục bộ được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

1. Vô hiệu hóa tính toán độ dốc cục bộ

torch.autogard.no_grad: Trình quản lý bối cảnh vô hiệu hóa tính toán độ dốc.

Khi xác định rằng Tensor.backward() sẽ không được gọi để tính toán độ dốc, việc tắt tính toán độ dốc sẽ giảm mức tiêu thụ bộ nhớ. Nếu bạn cần tính toán độ dốc, hãy đặt Tensor.requires_grad=True.

Hai phương pháp vô hiệu hóa:

Đặt các biến không cần tính toán độ dốc bằng torch.no_grad().

>>> x = torch.tensor([1.], requirements_grad=True)>>> với torch.no_grad():... y = x * 2>>> y.requires_gradOut[12]:False

Các hàm được trang trí bằng trình trang trí @torch.no_gard() không được phép tính toán độ dốc khi được gọi.

>>> @torch.no_grad()... def doubler(x):... return x * 2>>> z = doubler(x)>>> z.requires_gradOut[13]:False

2. Cho phép tính gradient cục bộ sau lệnh cấm

torch.autogard.enable_grad : Trình quản lý bối cảnh cho phép tính toán độ dốc.

Bật tính toán độ dốc trong ngữ cảnh no_grad. Trình quản lý bối cảnh này không có tác dụng bên ngoài no_grad.

Cách sử dụng tương tự như trên:

Sử dụng với torch.enable_grad() để cho phép tính toán độ dốc.

>>> x = torch.tensor([1.], requires_grad=True)>>> with torch.no_grad():... with torch.enable_grad():... y = x * 2>>> y.requires_gradOut[14]:True >>> y.backward() # Yêu cầu>>> x.gradOut[15]: tensor([2.])

Khi tính toán độ dốc bị vô hiệu hóa, một hàm được phép tính toán độ dốc sẽ được gọi và kết quả là độ dốc có thể được tính toán.

>>> @torch.enable_grad()... def doubler(x):... return x * 2 >>> với torch.no_grad():... z = doubler(x)>>> z.requires_grad Out[16]:True

3. Có tính toán độ dốc không

torch.autograd.set_grad_enable()

Có thể được sử dụng như một chức năng:

>>> x = torch.tensor([1.], requires_grad=True)>>> is_train = False>>> với torch.set_grad_enabled(is_train):... y = x * 2>>> y.requires_gradOut[17]:False >>> torch.set_grad_enabled(True)>>> y = x * 2>>> y.requires_gradOut[18]:True >>> torch.set_grad_enabled(False)>>> y = x * 2>>> y.requires_gradOut[19]:False

Tóm tắt:

Sẽ không có gì khi chỉ sử dụng ba hàm này, nhưng nếu chúng được lồng vào nhau, hãy tuân theo nguyên tắc lân cận.

x = torch.tensor([1.], requirements_grad=True) với torch.enable_grad(): torch.set_grad_enabled(False) y = x * 2 print(y.requires_grad)Out[20]: False torch.set_grad_enabled(True)với torch.no_grad(): z = x * 2 print(z.requires_grad)Out[21]:False

Phần bổ sung: Vô hiệu hóa tính toán độ dốc trong phạm vi cục bộ của pytorch, ví dụ về cách sử dụng no_grad, Enable_grad và set_grad_enabled.

pytorch vô hiệu hóa/cho phép các hoạt động tính toán độ dốc cục bộ pytorch vô hiệu hóa/cho phép các hoạt động tính toán độ dốc cục bộ

Văn bản gốc và bản dịch

Việc tắt tính toán độ dốc cục bộ sẽ tắt (vô hiệu hóa) tính toán độ dốc trong một khu vực cục bộ. Các trình quản lý bối cảnh torch.no_grad(), torch.enable_grad() và torch.set_grad_enabled() rất hữu ích cho việc vô hiệu hóa và bật tính toán độ dốc cục bộ. Xem phần này. Vô hiệu hóa tính toán độ dốc cục bộ để biết thêm chi tiết về cách sử dụng của chúng. Các trình quản lý bối cảnh này là luồng cục bộ, vì vậy chúng sẽ không hoạt động nếu bạn gửi công việc đến một luồng khác bằng mô-đun luồng, v.v. Trình quản lý bối cảnh torch.no_grad(), torch.enable_grad() và torch.set_grad_enabled() có thể được sử dụng để bật hoặc tắt tính toán độ dốc trong phạm vi cục bộ. Phương pháp vô hiệu hóa tính toán độ dốc cục bộ được mô tả chi tiết trong Cục bộ. vô hiệu hóa chương tính toán độ dốc Cách sử dụng. Các trình quản lý bối cảnh này là cục bộ theo luồng, vì vậy nếu bạn sử dụng mô-đun phân luồng để gửi khối lượng công việc đến một luồng khác, thì các trình quản lý bối cảnh này sẽ không hoạt động. tính toán.no_grad Trình quản lý bối cảnh cho phép tính toán độ dốc.enable_grad Trình quản lý bối cảnh cho phép tính toán độ dốc.set_grad_enabled Trình quản lý bối cảnh bật hoặc tắt tính toán độ dốc.set_grad_enabled Trình quản lý bối cảnh cho trạng thái bật hoặc tắt của tính toán độ dốc.

Ví dụ 1

Microsoft Windows [Phiên bản 10.0.18363.1440](c) 2019 Microsoft Corporation。Phiên bản hiện tại là 10.0.18363.1440. C:Userschenxuqi>conda activate pytorch_1.7.1_cu102(pytorch_1.7.1_cu102) C:Userschenxuqi>pythonPython 3.7.9 (mặc định, 31 tháng 8 năm 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. trên win32Nhập "trợ giúp", "bản quyền", "tín dụng" hoặc "giấy phép" để biết thêm thông tin.>>> import torch>>> torch.manual_seed(seed=20200910)>>> a = torch.randn(3,4,requires_grad=True)>>> atensor([[ 0,2824, -0,3715, 0,9088, -1,7601], [-0,1806, 2,0937, 1,0406, -1,7651], [ 1,1216, 0,8440, 0,1783, 0,6859]], require_grad=True)>>> b = a * 2>>> btensor([[ 0,5648, -0,7430, 1,8176, -3,5202], [-0,3612, 4,1874, 2,0812, -3,5303], [ 2.2433, 1.6879, 0.3567, 1.3718]], grad_fn=)>>> b.requires_gradTrue>>> b.grad__main__:1: UserWarning: Thuộc tính .grad của Tensor không phải là Tensor lá đang được truy cập. Thuộc tính .grad của nó sẽ không được điền trong autograd.backward(). Nếu bạn thực sự muốn gradient cho một Tensor không phải lá, hãy sử dụng .retain_grad() trên Tensor không phải lá. Nếu bạn vô tình truy cập Tensor không phải lá, hãy đảm bảo rằng bạn truy cập Tensor lá thay thế. Xem github.com/pytorch/pytorch/pull/30531 để biết thêm thông tin.>>> print(b.grad)None>>> a.requires_gradTrue>>> a.grad>>> print(a.grad)None>>>>> with torch.no_grad():... c = a * 2...>>> ctensor([[ 0.5648, -0.7430, 1.8176, -3.5202], [-0.3612, 4.1874, 2.0812, -3.5303], [ 2.2433, 1.6879, 0.3567, 1.3718]])>>> c.requires_gradFalse>>> print(c.grad)None>>> a.grad>>>>>> print(a.grad)None>>> c.sum()tensor(6.1559)>>>>>> c.sum().backward()Traceback (cuộc gọi gần đây nhất cuối cùng): Tệp "", dòng 1, trong  Tệp "D:Anaconda3envspytorch_1.7.1_cu102libsite-packages orch ensor.py", dòng 221, trong torch.autograd.backward(self, gradient, retain_graph, create_graph) Tệp "D:Anaconda3envspytorch_1.7.1_cu102libsite-packages orchautograd\__init__.py", dòng 132, trong allow_unreachable=True) # allow_unreachable flagRuntimeError: phần tử 0 của tenxơ không yêu cầu grad và không có grad_fn>>>>>>> b.sum()tensor(6.1559, grad_fn=)>>> b.sum().backward()>>>>>>>>> a.gradtensor([[2., 2., 2., 2.], [2., 2., 2., 2.], [2., 2., 2., 2.]])>>> a.requires_gradTrue>>>>>>

Ví dụ 2

Microsoft Windows [Phiên bản 10.0.18363.1440](c) 2019 Microsoft Corporation。Phiên bản hiện tại là 10.0.18363.1440. C:Userschenxuqi>conda activate pytorch_1.7.1_cu102(pytorch_1.7.1_cu102) C:Userschenxuqi>pythonPython 3.7.9 (mặc định, 31 tháng 8 năm 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. trên win32Nhập "trợ giúp", "bản quyền", "tín dụng" hoặc "giấy phép" để biết thêm thông tin.>>> import torch>>> torch.manual_seed(seed=20200910)>>>>>> a = torch.randn(3,4,requires_grad=True)>>> atensor([[ 0,2824, -0,3715, 0,9088, -1,7601], [-0,1806, 2,0937, 1,0406, -1,7651], [ 1,1216, 0,8440, 0,1783, 0,6859]], require_grad=True)>>> a.requires_gradTrue>>>>>> với torch.set_grad_enabled(False):... b = a * 2...>>> btensor([[ 0,5648, -0,7430, 1,8176, -3,5202], [-0,3612, 4,1874, 2,0812, -3,5303], [ 2,2433, 1,6879, 0,3567, 1,3718]])>>> b.requires_gradFalse>>>>>> với torch.set_grad_enabled(True):... c = a * 3...>>> ctensor([[ 0,8472, -1,1145, 2,7263, -5,2804], [-0,5418, 6,2810, 3,1219, -5,2954], [ 3,3649, 2,5319, 0,5350, 2,0576]], grad_fn=)>>> c.requires_gradTrue>>>>>> d = a * 4>>> d.requires_gradTrue>>>>>> torch.set_grad_enabled(True) # điều này cũng có thể được sử dụng như một đối tượng hàm>>>>> # 以函数调用的方式来使用>>>>>> e = a * 5>>> etensor([[ 1.4119, -1.8574, 4.5439, -8.8006], [-0.9030, 10.4684, 5.2031, -8.8257], [ 5.6082, 4.2198, 0.8917, 3.4294]], grad_fn=)>>> e.requires_gradTrue>>>>>> dtensor([[ 1.1296, -1.4859, 3.6351, -7.0405], [-0.7224, 8.3747, 4.1625, -7.0606], [ 4.4866, 3.3759, 0.7133, 2.7435]], grad_fn=)>>>>>> torch.set_grad_enabled(False) # Đối tượng 以函数调用的方式来使用>>>>>>> f = a * 6>>> ftensor([[ 1.6943, -2,2289, 5,4527, -10,5607], [ -1,0836, 12,5621, 6,2437, -10,5908], [ 6,7298, 5,0638, 1,0700, 4,1153]])>>> f.requires_gradFalse>>>>>>>>>

Trên đây là kinh nghiệm cá nhân của mình, hi vọng có thể cho các bạn tham khảo và mong các bạn có thể ủng hộ mình. Nếu có sai sót hoặc thiếu sót gì xin vui lòng chỉ giáo cho tôi.

Liên kết gốc: https://blog.csdn.net/Answer3664/article/details/99460175.

Cuối cùng, bài viết về việc vô hiệu hóa/cho phép các hoạt động tính toán độ dốc cục bộ của pytorch kết thúc ở đây. Nếu bạn muốn biết thêm về việc vô hiệu hóa/cho phép các hoạt động tính toán độ dốc cục bộ của pytorch, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. ủng hộ blog của tôi trong tương lai! .

33 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress