Con đường.tham gia python

Tài liệu này cung cấp các giải pháp cho nhiều trường hợp sử dụng liên quan đến việc lưu và tải các mô hình PyTorch. Vui lòng đọc toàn bộ tài liệu hoặc chỉ cần bỏ qua mã bạn cần cho trường hợp sử dụng mong muốn

Khi nói đến việc lưu và tải các mô hình, có ba chức năng cốt lõi cần làm quen với

  1. đuốc. tiết kiệm. Lưu một đối tượng được tuần tự hóa vào đĩa. Hàm này sử dụng tiện ích pickle của Python để tuần tự hóa. Các mô hình, tenxơ và từ điển của tất cả các loại đối tượng có thể được lưu bằng chức năng này

  2. đuốc. trọng tải. Sử dụng các tiện ích giải nén của pickle để giải tuần tự hóa các tệp đối tượng đã chọn vào bộ nhớ. Chức năng này cũng tạo điều kiện cho thiết bị tải dữ liệu vào [xem Lưu & Tải mô hình trên các thiết bị]

  3. đuốc. nn. mô-đun. load_state_dict. Tải từ điển tham số của mô hình bằng cách sử dụng state_dict đã khử lưu lượng. Để biết thêm thông tin về state_dict, xem State_dict là gì?

nội dung

  • state_dict là gì?

  • Lưu và tải mô hình để suy luận

  • Lưu và tải một điểm kiểm tra chung

  • Lưu nhiều mô hình trong một tệp

  • Khởi động mô hình bằng cách sử dụng các tham số từ một mô hình khác

  • Lưu và tải mô hình trên các thiết bị

torch.save[model.state_dict[], PATH]
2 là gì?¶

Trong PyTorch, các tham số có thể học được [i. e. trọng số và độ lệch] của mô hình

torch.save[model.state_dict[], PATH]
3 được chứa trong các tham số của mô hình [được truy cập bằng
torch.save[model.state_dict[], PATH]
4]. State_dict chỉ đơn giản là một đối tượng từ điển Python ánh xạ từng lớp tới tensor tham số của nó. Lưu ý rằng chỉ các lớp có tham số có thể học được [lớp tích chập, lớp tuyến tính, v.v. ] và bộ đệm đã đăng ký [batchnorm’s running_mean] có các mục trong mô hình state_dict. Các đối tượng của trình tối ưu hóa [
torch.save[model.state_dict[], PATH]
5] cũng có một state_dict, chứa thông tin về trạng thái của trình tối ưu hóa, cũng như các siêu tham số được sử dụng

Bởi vì các đối tượng state_dict là các từ điển Python nên chúng có thể dễ dàng được lưu, cập nhật, thay đổi và khôi phục, bổ sung rất nhiều tính mô-đun cho các mô hình và trình tối ưu hóa của PyTorch

Thí dụ. ¶

Chúng ta hãy xem state_dict từ mô hình đơn giản được sử dụng trong hướng dẫn Đào tạo bộ phân loại

# Define model
class TheModelClass[nn.Module]:
    def __init__[self]:
        super[TheModelClass, self].__init__[]
        self.conv1 = nn.Conv2d[3, 6, 5]
        self.pool = nn.MaxPool2d[2, 2]
        self.conv2 = nn.Conv2d[6, 16, 5]
        self.fc1 = nn.Linear[16 * 5 * 5, 120]
        self.fc2 = nn.Linear[120, 84]
        self.fc3 = nn.Linear[84, 10]

    def forward[self, x]:
        x = self.pool[F.relu[self.conv1[x]]]
        x = self.pool[F.relu[self.conv2[x]]]
        x = x.view[-1, 16 * 5 * 5]
        x = F.relu[self.fc1[x]]
        x = F.relu[self.fc2[x]]
        x = self.fc3[x]
        return x

# Initialize model
model = TheModelClass[]

# Initialize optimizer
optimizer = optim.SGD[model.parameters[], lr=0.001, momentum=0.9]

# Print model's state_dict
print["Model's state_dict:"]
for param_tensor in model.state_dict[]:
    print[param_tensor, "\t", model.state_dict[][param_tensor].size[]]

# Print optimizer's state_dict
print["Optimizer's state_dict:"]
for var_name in optimizer.state_dict[]:
    print[var_name, "\t", optimizer.state_dict[][var_name]]

đầu ra

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]

Lưu và tải mô hình để suy luận¶

Lưu/Tải
torch.save[model.state_dict[], PATH]
2 [Được khuyến nghị]¶

Tiết kiệm

torch.save[model.state_dict[], PATH]

Trọng tải

________số 8

Ghi chú

1. Bản phát hành 6 của PyTorch đã chuyển

torch.save[model.state_dict[], PATH]
7 sang sử dụng định dạng tệp dựa trên zipfile mới.
torch.save[model.state_dict[], PATH]
8 vẫn giữ khả năng tải tệp ở định dạng cũ. Nếu vì bất kỳ lý do gì bạn muốn
torch.save[model.state_dict[], PATH]
7 sử dụng định dạng cũ, hãy chuyển kwarg
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
0

Khi lưu mô hình để suy luận, chỉ cần lưu các tham số đã học của mô hình được đào tạo. Lưu state_dict của mô hình bằng hàm

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
1 sẽ mang lại cho bạn sự linh hoạt nhất để khôi phục mô hình sau này, đó là lý do tại sao đây là phương pháp được đề xuất để lưu mô hình

Một quy ước phổ biến của PyTorch là lưu các mô hình bằng phần mở rộng tệp

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
2 hoặc
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
3

Hãy nhớ rằng bạn phải gọi

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
4 để đặt các lớp chuẩn hóa hàng loạt và loại bỏ thành chế độ đánh giá trước khi chạy suy luận. Không làm được điều này sẽ mang lại kết quả suy luận không nhất quán

Ghi chú

Lưu ý rằng hàm

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
5 lấy đối tượng từ điển, KHÔNG phải đường dẫn đến đối tượng đã lưu. Điều này có nghĩa là bạn phải deserialize state_dict đã lưu trước khi chuyển nó tới hàm
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
5. Ví dụ: bạn KHÔNG THỂ tải bằng
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
7

Ghi chú

Nếu bạn chỉ định giữ mô hình hoạt động tốt nhất [theo tổn thất xác thực thu được], đừng quên rằng

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
8 trả về một tham chiếu đến trạng thái chứ không phải bản sao của nó. Bạn phải đánh số thứ tự
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
9 hoặc sử dụng
torch.save[model.state_dict[], PATH]
20 nếu không thì
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
9 tốt nhất của bạn sẽ tiếp tục được cập nhật trong các lần lặp lại đào tạo tiếp theo. Do đó, trạng thái mô hình cuối cùng sẽ là trạng thái của mô hình được trang bị quá mức

Lưu/Tải toàn bộ mô hình¶

Tiết kiệm

torch.save[model.state_dict[], PATH]
2

Trọng tải

torch.save[model.state_dict[], PATH]
5

Quá trình lưu/tải này sử dụng cú pháp trực quan nhất và sử dụng ít mã nhất. Lưu mô hình theo cách này sẽ lưu toàn bộ mô-đun bằng cách sử dụng mô-đun pickle của Python. Nhược điểm của phương pháp này là dữ liệu tuần tự hóa được liên kết với các lớp cụ thể và cấu trúc thư mục chính xác được sử dụng khi mô hình được lưu. Lý do là vì pickle không tự save model class. Thay vào đó, nó lưu một đường dẫn đến tệp chứa lớp, được sử dụng trong thời gian tải. Do đó, mã của bạn có thể bị hỏng theo nhiều cách khác nhau khi được sử dụng trong các dự án khác hoặc sau khi tái cấu trúc

Một quy ước phổ biến của PyTorch là lưu các mô hình bằng phần mở rộng tệp

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
2 hoặc
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
3

Hãy nhớ rằng bạn phải gọi

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
4 để đặt các lớp chuẩn hóa hàng loạt và loại bỏ thành chế độ đánh giá trước khi chạy suy luận. Không làm được điều này sẽ mang lại kết quả suy luận không nhất quán

Xuất/tải mô hình ở định dạng TorchScript¶

Một cách phổ biến để suy luận với một mô hình được đào tạo là sử dụng TorchScript, một biểu diễn trung gian của mô hình PyTorch có thể chạy trong Python cũng như trong môi trường hiệu năng cao như C++. TorchScript thực sự là định dạng mô hình được đề xuất để triển khai và suy luận theo tỷ lệ

Ghi chú

Sử dụng định dạng TorchScript, bạn sẽ có thể tải mô hình đã xuất và chạy suy luận mà không cần xác định lớp mô hình

Xuất khẩu

torch.save[model.state_dict[], PATH]
9

Trọng tải

torch.save[model.state_dict[], PATH]
0

Hãy nhớ rằng bạn phải gọi

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
4 để đặt các lớp chuẩn hóa hàng loạt và loại bỏ thành chế độ đánh giá trước khi chạy suy luận. Không làm được điều này sẽ mang lại kết quả suy luận không nhất quán

Để biết thêm thông tin về TorchScript, vui lòng truy cập các hướng dẫn chuyên dụng. Bạn sẽ làm quen với chuyển đổi theo dõi và tìm hiểu cách chạy mô-đun TorchScript trong môi trường C++

Lưu và tải một điểm kiểm tra chung để suy luận và/hoặc tiếp tục đào tạo¶

Tiết kiệm. ¶

torch.save[model.state_dict[], PATH]
2

Trọng tải. ¶

torch.save[model.state_dict[], PATH]
3

Khi lưu một điểm kiểm tra chung, để được sử dụng cho suy luận hoặc tiếp tục đào tạo, bạn phải lưu nhiều hơn chỉ state_dict của mô hình. Điều quan trọng là cũng phải lưu state_dict của trình tối ưu hóa, vì nó chứa các bộ đệm và tham số được cập nhật khi mô hình đào tạo. Các mục khác mà bạn có thể muốn lưu là kỷ nguyên mà bạn đã dừng lại, lần mất tập luyện được ghi lại mới nhất, các lớp

torch.save[model.state_dict[], PATH]
26 bên ngoài, v.v. Kết quả là, một trạm kiểm soát như vậy thường lớn hơn 2~3 lần so với mô hình đơn lẻ

Để lưu nhiều thành phần, hãy sắp xếp chúng trong một từ điển và sử dụng

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
1 để sắp xếp theo thứ tự từ điển. Một quy ước phổ biến của PyTorch là lưu các điểm kiểm tra này bằng phần mở rộng tệp
torch.save[model.state_dict[], PATH]
28

Để tải các mục, trước tiên hãy khởi tạo mô hình và trình tối ưu hóa, sau đó tải cục bộ từ điển bằng cách sử dụng

torch.save[model.state_dict[], PATH]
29. Từ đây, bạn có thể dễ dàng truy cập các mục đã lưu bằng cách truy vấn từ điển như bạn mong đợi

Hãy nhớ rằng bạn phải gọi

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
4 để đặt các lớp chuẩn hóa hàng loạt và loại bỏ thành chế độ đánh giá trước khi chạy suy luận. Không làm được điều này sẽ mang lại kết quả suy luận không nhất quán. Nếu bạn muốn tiếp tục đào tạo, hãy gọi
torch.save[model.state_dict[], PATH]
51 để đảm bảo các lớp này đang ở chế độ đào tạo

Lưu nhiều mô hình trong một tệp¶

Tiết kiệm. ¶

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]
0

Trọng tải. ¶

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]
1

Khi lưu một mô hình bao gồm nhiều

torch.save[model.state_dict[], PATH]
52, chẳng hạn như GAN, mô hình theo trình tự hoặc một tập hợp các mô hình, bạn thực hiện theo phương pháp tương tự như khi bạn lưu một điểm kiểm tra chung. Nói cách khác, hãy lưu một từ điển về state_dict của từng mô hình và trình tối ưu hóa tương ứng. Như đã đề cập trước đây, bạn có thể lưu bất kỳ mục nào khác có thể hỗ trợ bạn tiếp tục đào tạo bằng cách chỉ cần thêm chúng vào từ điển

Một quy ước phổ biến của PyTorch là lưu các điểm kiểm tra này bằng phần mở rộng tệp

torch.save[model.state_dict[], PATH]
28

Để tải các mô hình, trước tiên hãy khởi tạo các mô hình và trình tối ưu hóa, sau đó tải cục bộ từ điển bằng cách sử dụng

torch.save[model.state_dict[], PATH]
29. Từ đây, bạn có thể dễ dàng truy cập các mục đã lưu bằng cách truy vấn từ điển như bạn mong đợi

Hãy nhớ rằng bạn phải gọi

model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
4 để đặt các lớp chuẩn hóa hàng loạt và loại bỏ thành chế độ đánh giá trước khi chạy suy luận. Không làm được điều này sẽ mang lại kết quả suy luận không nhất quán. Nếu bạn muốn tiếp tục đào tạo, hãy gọi
torch.save[model.state_dict[], PATH]
51 để đặt các lớp này ở chế độ đào tạo

Khởi động mô hình khởi động bằng cách sử dụng các tham số từ một mô hình khác¶

Tiết kiệm. ¶

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]
2

Trọng tải. ¶

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]
3

Tải một phần mô hình hoặc tải mô hình một phần là các tình huống phổ biến khi học chuyển giao hoặc đào tạo một mô hình phức tạp mới. Tận dụng các tham số được đào tạo, ngay cả khi chỉ một số ít có thể sử dụng được, sẽ giúp khởi động quá trình đào tạo và hy vọng sẽ giúp mô hình của bạn hội tụ nhanh hơn nhiều so với đào tạo từ đầu

Cho dù bạn đang tải từ một phần state_dict thiếu một số khóa hay đang tải một state_dict có nhiều khóa hơn mô hình mà bạn đang tải vào, bạn có thể đặt đối số

torch.save[model.state_dict[], PATH]
57 thành Sai trong hàm
model = TheModelClass[*args, **kwargs]
model.load_state_dict[torch.load[PATH]]
model.eval[]
5 để bỏ qua các khóa không khớp

Nếu bạn muốn tải các tham số từ lớp này sang lớp khác, nhưng một số khóa không khớp, chỉ cần thay đổi tên của các khóa tham số trong state_dict mà bạn đang tải để khớp với các khóa trong mô hình mà bạn đang tải vào

Lưu và tải mô hình trên các thiết bị¶

Tiết kiệm trên GPU, Tải trên CPU¶

Tiết kiệm

torch.save[model.state_dict[], PATH]

Trọng tải

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]
5

Khi tải một mô hình trên CPU đã được đào tạo với GPU, hãy chuyển ____259 cho đối số

torch.save[model.state_dict[], PATH]
90 trong hàm_
torch.save[model.state_dict[], PATH]
29. Trong trường hợp này, kho lưu trữ bên dưới tenxơ được ánh xạ động tới thiết bị CPU bằng cách sử dụng đối số
torch.save[model.state_dict[], PATH]
90

Tiết kiệm trên GPU, Tải trên GPU¶

Tiết kiệm

torch.save[model.state_dict[], PATH]

Trọng tải

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]
7

Khi tải một mô hình trên GPU đã được đào tạo và lưu trên GPU, chỉ cần chuyển đổi

torch.save[model.state_dict[], PATH]
93 đã khởi tạo thành mô hình được tối ưu hóa CUDA bằng cách sử dụng
torch.save[model.state_dict[], PATH]
94. Ngoài ra, hãy chắc chắn sử dụng chức năng
torch.save[model.state_dict[], PATH]
95 trên tất cả các đầu vào mô hình để chuẩn bị dữ liệu cho mô hình. Lưu ý rằng việc gọi
torch.save[model.state_dict[], PATH]
96 trả về một bản sao mới của
torch.save[model.state_dict[], PATH]
97 trên GPU. Nó KHÔNG ghi đè lên
torch.save[model.state_dict[], PATH]
97. Do đó, hãy nhớ ghi đè tensor theo cách thủ công.
torch.save[model.state_dict[], PATH]
99

Tiết kiệm trên CPU, Tải trên GPU¶

Tiết kiệm

torch.save[model.state_dict[], PATH]

Trọng tải

Model's state_dict:
conv1.weight     torch.Size[[6, 3, 5, 5]]
conv1.bias   torch.Size[[6]]
conv2.weight     torch.Size[[16, 6, 5, 5]]
conv2.bias   torch.Size[[16]]
fc1.weight   torch.Size[[120, 400]]
fc1.bias     torch.Size[[120]]
fc2.weight   torch.Size[[84, 120]]
fc2.bias     torch.Size[[84]]
fc3.weight   torch.Size[[10, 84]]
fc3.bias     torch.Size[[10]]

Optimizer's state_dict:
state    {}
param_groups     [{'lr': 0.001, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'params': [4675713712, 4675713784, 4675714000, 4675714072, 4675714216, 4675714288, 4675714432, 4675714504, 4675714648, 4675714720]}]
9

Khi tải một mô hình trên GPU đã được đào tạo và lưu trên CPU, hãy đặt đối số

torch.save[model.state_dict[], PATH]
90 trong hàm
torch.save[model.state_dict[], PATH]
29 thành cuda. device_id. Điều này tải mô hình vào một thiết bị GPU nhất định. Tiếp theo, hãy nhớ gọi
torch.save[model.state_dict[], PATH]
94 để chuyển đổi các tenxơ tham số của mô hình thành các tenxơ CUDA. Cuối cùng, hãy đảm bảo sử dụng hàm
torch.save[model.state_dict[], PATH]
95 trên tất cả các đầu vào mô hình để chuẩn bị dữ liệu cho mô hình được tối ưu hóa CUDA. Lưu ý rằng việc gọi
torch.save[model.state_dict[], PATH]
96 trả về một bản sao mới của
torch.save[model.state_dict[], PATH]
97 trên GPU. Nó KHÔNG ghi đè lên
torch.save[model.state_dict[], PATH]
97. Do đó, hãy nhớ ghi đè tensor theo cách thủ công.
torch.save[model.state_dict[], PATH]
99

Lưu mẫu
torch.save[model.state_dict[], PATH]
08¶

Tiết kiệm

torch.save[model.state_dict[], PATH]
0

Trọng tải

torch.save[model.state_dict[], PATH]
1

torch.save[model.state_dict[], PATH]
08 là trình bao bọc mô hình cho phép sử dụng GPU song song. Để lưu mô hình
torch.save[model.state_dict[], PATH]
20 một cách tổng quát, hãy lưu tệp
torch.save[model.state_dict[], PATH]
21. Bằng cách này, bạn có thể linh hoạt tải mô hình theo bất kỳ cách nào bạn muốn vào bất kỳ thiết bị nào bạn muốn

Chủ Đề