Xin chào và chào mừng bạn đến với hướng dẫn Python này.
Được rồi, chúng ta có một hàm cuối cùng để triển khai trong lớp bộ nhớ phát lại của chúng ta.
Đó là chức năng đơn giản.
Và đó, tất nhiên, để lấy một số mẫu ngẫu nhiên từ bộ nhớ của chúng ta.
Và do đó, hàm này sẽ trả về các mẫu ngẫu nhiên này.
Được rồi.
Vì vậy, chúng ta hãy thực hiện nó.
Chúng tôi sẽ gọi nó là mẫu.
Chúng ta bắt đầu.
Và hàm này nhận hai đối số làm đầu vào.
Người đầu tiên, như thường lệ, tự.
Đối tượng tương lai của lớp bộ nhớ phát lại của chúng ta.
Và lập luận thứ hai là, bạn có thể thử đoán xem?
Chà, chúng tôi đang lấy một số mẫu, một kích thước cố định, và do đó chúng tôi cần chọn một kích thước cho các mẫu của chúng tôi.
Và chính xác hơn, chúng tôi gọi nó là kích thước lô.
Vì vậy, đó là tên mà chúng tôi sẽ đặt cho đối số thứ hai của chúng tôi, kích thước lô.
Và chúng ta bắt đầu.
Chúng ta có hai đối số và bây giờ chúng ta có thể triển khai hàm mẫu.
Vì vậy, bây giờ tôi chỉ muốn cảnh báo bạn, điều này sẽ có một chút kỹ thuật, nhưng tôi sẽ cố gắng hết sức để giải thích.
Vì vậy, chúng ta sẽ bắt đầu bằng cách tạo biến mẫu.
Đây chỉ là biến sẽ chứa các mẫu của bộ nhớ.
Được rồi.
Vì vậy, các mẫu bằng nhau.
Và vì vậy bây giờ chúng ta sẽ làm thế nào để có được những mẫu này?
Trước hết, chúng ta phải lấy lại trí nhớ của mình vì chúng ta đang lấy những mẫu này từ trí nhớ của mình.
Sau đó, chúng tôi có thể sẽ cần kích thước lô vì các mẫu chúng tôi muốn lấy có chứa các yếu tố kích thước lô.
Vì vậy, chúng ta cần bộ nhớ, chúng ta cần kích thước lô, và sau đó chúng ta cần một số thủ thuật PyTorch hoặc Python để có được
định dạng tốt của các mẫu này.
Vì vậy, những gì tôi sẽ làm, tôi sẽ viết dòng mã và sau đó tôi sẽ giải thích nó
từng phần tử.
Vì vậy, chúng ta hãy làm điều đó.
Tôi đang bắt đầu bằng cách sử dụng một chức năng zip.
Tôi sẽ giải thích rất sớm những gì nó làm.
Và bên trong hàm zip này, tôi sẽ thêm một ngôi sao.
Tôi cũng sẽ mở rộng điều đó.
Ngôi sao và mẫu chấm ngẫu nhiên.
Vì vậy, ngẫu nhiên, như bạn có thể đoán, là thư viện ngẫu nhiên mà chúng tôi đã nhập ở đây.
Vì vậy, đó là lý do chính tại sao chúng tôi phải nhập thư viện ngẫu nhiên này, bởi vì chúng tôi đang lấy một số
mẫu ngẫu nhiên.
Vì vậy, từ thư viện ngẫu nhiên này, chúng ta sẽ sử dụng hàm mẫu.
Vì vậy, đây là các biến của chúng tôi và đây là một hàm.
Vì vậy, tôi sẽ thêm một số dấu ngoặc đơn.
Và bây giờ như bạn thấy, mẫu là một hàm và chúng ta phải nhập một số đối số.
Vì vậy, như bạn có thể thấy, lập luận đầu tiên là bản thân.
Và thực sự nói về bản thân, điều này tương ứng với bộ nhớ bản thân, bộ nhớ của phiên bản tương lai của chúng ta, đối tượng của
lớp bộ nhớ phát lại của chúng ta.
Vì vậy, tôi sẽ thêm vào đây tự kỷ niệm đó.
Và sau đó đối số thứ hai là, như bạn có thể đoán, kích thước của lô mà chúng tôi muốn
lấy ngẫu nhiên từ bộ nhớ của mình và chúng tôi đã đặt tên cho nó là kích thước lô.
Vì vậy, đối số thứ hai sẽ là kích thước lô.
Được rồi.
Vì vậy, dòng mã đã được nhập và bây giờ tôi sẽ giải thích những gì nó làm.
Vì vậy, trước hết, với chức năng lấy mẫu ngẫu nhiên này, chúng tôi đang lấy một số mẫu ngẫu nhiên từ bộ
nhớ có kích thước cố định của kích thước lô.
Vì vậy, đó là điều dễ hiểu.
Nhưng sau đó chức năng lưu trữ zip này làm gì?
Chà, không có gì bí ẩn về nó.
Nó chỉ giống như một chức năng định hình lại.
Vì vậy, ví dụ, tôi sẽ thêm một chút phổ biến ở đây chỉ để giải thích rằng tôi sẽ xóa nó.
Vì vậy, giả sử rằng, ví dụ, chúng ta có một danh sách các phần tử sau.
Ví dụ, đầu tiên là một, hai, ba, và sau đó là phần tử thứ hai, bốn, năm, sáu.
Vì vậy, chúng tôi có một danh sách gồm hai bộ giá trị của ba phần tử một, hai, ba và bốn, năm, sáu.
Vậy nếu tôi áp dụng chức năng zip với ngôi sao trên đó, thì, nó sẽ trở thành gì?
Vì vậy, danh sách sao zip sẽ giống với một danh sách mới, nhưng có hình dạng khác.
Và hình dạng khác nhau này sẽ là một bốn, sau đó hai, ba, và sau đó là năm, sáu.
Được rồi.
Vì vậy, đó chỉ là những gì nó làm.
Nó chỉ định hình lại danh sách của bạn.
Được chứ.
Vì vậy, bây giờ bạn đã hiểu danh sách sao zip này làm gì, và bây giờ hãy giải thích lý do tại sao chúng ta phải làm điều
đó.
Vì vậy, như bạn đã hiểu, chúng tôi sẽ thêm các sự kiện vào bộ nhớ và các sự kiện có dạng, đầu tiên là
trạng thái, sau đó là hành động và sau đó là phần thưởng.
Nhưng đối với thuật toán của chúng tôi, chúng tôi không muốn định dạng này.
Chúng tôi thực sự muốn các mẫu của mình có định dạng sau, một định dạng bao gồm ba mẫu, một mẫu
cho trạng thái, một mẫu cho các hành động và một mẫu cho phần thưởng.
Vì vậy, ví dụ, giả sử rằng 1 đến 3 này là trạng thái một, hành động một, thưởng cho một và sau đó nêu
lên hành động và thưởng cho hai.
Chà, những gì chúng tôi muốn là một đợt cho mỗi đợt cho trạng thái một và ở lại hai đợt một cho đợt một cho hành
động một trong hành động hai và một đợt thứ ba cho một phần thưởng.
Và chúng tôi là hai.
Đó chỉ là định dạng sẽ được mong đợi tiếp theo vì sau đó chúng tôi sẽ gói các lô này
thành một biến PyTorch.
Và một biến python, hãy nhớ, là một biến chứa cả tensor và gradient.
Và đó là để có thể phân biệt với tensor, để có thể phân biệt với
tensor, chúng ta cần cấu trúc của một biến có chứa tensor và gradient.
Một lần nữa, đó là cách PyTorch hoạt động.
Vì vậy, để tóm tắt, chúng tôi đang tạo một lô cho mỗi hành động và phần thưởng trạng thái, sau đó chúng tôi
sẽ đặt từng lô này riêng biệt thành một số biến PyTorch, mỗi biến sẽ nhận được một gradient để
cuối cùng chúng ta sẽ có thể phân biệt từng người trong số họ.
Được rồi.
Vì vậy, đó là mục đích của chức năng này.
Vì vậy, hãy để tôi chỉ cần xóa bình luận này.
Và bây giờ điều duy nhất mà chúng tôi phải làm còn lại là trả lại các mẫu.
Vì vậy, như tôi vừa giải thích, chúng tôi không thể trả về các mẫu trực tiếp vì lý do đơn giản
là chúng tôi muốn đặt các mẫu vào một biến PyTorch.
Vì vậy, để làm điều này cho mỗi mẫu, chúng ta sẽ sử dụng hàm bản đồ và hàm
bản đồ này sẽ thực hiện ánh xạ từ các mẫu để chạm vào các biến sẽ chứa tensor và gradient.
Vì vậy, như bạn có thể thấy, hàm bản đồ này có một số đối số.
Đối số đầu tiên là một hàm và hàm này sẽ là hàm sẽ chuyển đổi các mẫu
thành một số biến được dạy.
Và đối số thứ hai là những gì chúng ta muốn áp dụng hàm này.
Vì vậy, đó sẽ là đối số của hàm này.
Và do đó, nó sẽ là gì?
Đó là tất nhiên sẽ là các mẫu.
Vì vậy, đối số thứ hai ở đây sẽ là các mẫu, nhưng sau đó hãy xác định hàm mà chúng
ta muốn áp dụng từng mẫu.
Vì vậy, để định nghĩa một hàm ở đây, trước tiên chúng ta cần đặt tên cho hàm mà chúng ta sẽ gọi là Lambda.
Đó chỉ là tên của lambda, sau đó là x, sẽ là biến của hàm này.
Vì vậy, đó chỉ là tên tôi đang đặt cho biến và sau đó là dấu hai chấm.
Và ở đây chúng tôi đưa ra biểu thức của hàm.
Đó là những gì chúng ta muốn hàm lambda này trả về.
Và vì vậy, những gì nó sẽ xảy ra, tốt, nó phải là một thứ gì đó sẽ chuyển đổi hoặc lấy mẫu thành
một biến ngọn đuốc.
Và để làm điều này, chúng tôi đã đề cập đến nó trong một số hướng dẫn trước đây, nơi chúng tôi có hàm biến cho
điều đó.
Hàm biến sẽ thực hiện chuyển đổi đó từ tensor ngọn đuốc sang một biến sẽ chứa
tensor này và gradient.
Vì vậy, điều đầu tiên tôi sẽ thêm ở đây là biến biến bên trong mà tôi sẽ chuyển đổi X
vì X sẽ là các mẫu khi lambda sẽ được áp dụng vào các mẫu.
Nhưng đó không phải là tất cả.
Có một điều kỹ thuật cuối cùng mà chúng ta cần thực hiện.
Thực tế là đối với mỗi lô chứa trong mẫu, ví dụ, lô của các
hành động một, một, hai, ba và các hành động khác, chúng ta phải nối nó với thứ
nguyên đầu tiên tương ứng với nhà nước.
Và tại sao chúng ta phải thực hiện nối này?
Nó chỉ để mọi thứ được liên kết tốt.
Tức là ở mỗi hàng trạng thái, hành động và phần thưởng tương ứng với thời gian.
T Vì vậy, cuối cùng chúng ta nhận được một danh sách các lô đều được căn chỉnh tốt và mỗi lô là một biến pytorch.
Vì vậy, làm thế nào chúng ta có thể thực hiện nối này?
Chà, chúng ta cần sử dụng hàm mèo từ thư viện bó đuốc.
Vì vậy, chúng tôi sẽ thêm ở đây ngọn đuốc mà chúng tôi thêm con mèo đó áp dụng cho X.
Nhưng sau đó trong hàm cat này, chúng ta cần chỉ định thứ nguyên liên quan đến thứ mà chúng ta muốn
thực hiện nối đó.
Và như tôi vừa đề cập, đây là thứ nguyên đầu tiên có chỉ số bằng không.
Và chúng ta bắt đầu.
Chúng tôi đã sẵn sàng chức năng của mình.
Hàm lambda này sẽ lấy các mẫu, nối chúng với kích thước đầu tiên và sau đó cuối
cùng chúng tôi chuyển đổi các cảm biến thành một số biến ngọn đuốc có chứa cả cảm biến và gradient, để
sau này khi chúng tôi áp dụng lưới ngẫu nhiên theo nghĩa chúng ta sẽ có thể phân biệt để
cập nhật trọng số.
Được rồi, vậy là chức năng này đã sẵn sàng.
Và đây là đối số thứ hai của hàm bản đồ, chúng ta cần chỉ định những gì chúng ta muốn áp dụng hàm lambda này
và đó là trên tất cả các mẫu của chúng ta mà chúng ta sử dụng, chúng ta sẽ áp dụng hàm lambda này
trên tất cả các mẫu để cuối cùng chúng ta lấy danh sách các lô trong đó mỗi lô là một biến pytorch.
Được rồi.
Vì vậy, đó là khá kỹ thuật, nhưng bây giờ ít nhất mọi thứ sẽ hoạt động.
Chà, chúng tôi sẽ không sử dụng kỹ thuật này sau đó.
Chúng tôi chỉ sử dụng nó ở đây.
Vì vậy, nếu bạn không muốn hiểu sâu về các chi tiết kỹ thuật ở đây, thì tốt thôi.
Bạn chỉ có thể sao chép ba dòng mã này để lấy mẫu bộ nhớ của mình.
Nếu bạn muốn tạo trí thông minh nhân tạo với PyTorch, nó sẽ như bạn muốn.
Nhưng bây giờ tin tốt là chúng ta đã hoàn tất việc phát lại trải nghiệm lớp bộ nhớ phát lại này hiện đã được triển khai và
chúng ta có thể chuyển sang lớp tiếp theo và lớp cuối cùng, đây sẽ là toàn bộ mô hình học sâu.
Vì vậy, trong mô hình học sâu này, tất nhiên chúng ta sẽ có mạng lưới của mình, những người sẽ thêm kinh nghiệm, phát lại
và sau đó là tất cả phần còn lại của thuật toán học sâu.
Vì vậy, nó sẽ là một lớp học lớn hơn nhiều.
Chúng tôi sẽ tạo ra khoảng mười hàm, nhưng đó chỉ là vì chúng tôi đang làm điều này từng bước để bạn có thể
hiểu rõ hơn những gì đang xảy ra.
Vì vậy, tôi rất nóng lòng muốn triển khai mô hình học sâu của chúng tôi.
Và cho đến lúc đó, hãy tận hưởng tôi.