WEBVTT

00:00.120 --> 00:02.720
Xin chào và chào mừng bạn đến với hướng dẫn Python này.

00:02.730 --> 00:08.010
Trong hướng dẫn này, chúng ta sẽ thực hiện bước đầu tiên để triển khai mô hình học sâu.

00:08.010 --> 00:13.560
Vì vậy, về cơ bản chúng ta sắp triển khai toàn bộ quy trình của thuật toán học sâu.

00:13.560 --> 00:16.530
Và vì vậy chúng tôi sẽ sử dụng những gì chúng tôi đã tạo trước đó.

00:16.560 --> 00:22.320
Đó là kiến trúc của mạng nơ-ron để phát lại bộ nhớ, để tích hợp điều này vào toàn bộ quá

00:22.470 --> 00:23.520
trình học sâu.

00:23.880 --> 00:28.200
Và toàn bộ thuật toán học sâu này sẽ phù hợp với một lớp học.

00:28.200 --> 00:32.070
Vì vậy, đó là lớp cuối cùng chúng tôi đang thực hiện để triển khai trí tuệ nhân tạo.

00:32.070 --> 00:35.520
Và lớp này sẽ chỉ chứa các chức năng khác nhau.

00:35.520 --> 00:41.730
Vì vậy, chúng ta sẽ có các hàm init sẽ tạo và khởi tạo tất cả các biến được gắn với các đối tượng

00:41.730 --> 00:47.070
học sâu trong tương lai của chúng ta, chúng sẽ đại diện cho chính mô hình học sâu và sẽ có

00:47.070 --> 00:48.300
một số hàm khác.

00:48.300 --> 00:52.650
Tất nhiên, một trong số chúng sẽ là chọn hành động phù hợp tại mỗi thời điểm.

00:52.650 --> 00:58.860
Chúng tôi cũng sẽ có một chức năng cập nhật, một chức năng tính điểm để lấy điểm và có một ý tưởng về việc học tập sẽ diễn

00:58.860 --> 00:59.730
ra như thế nào.

00:59.730 --> 01:05.640
Nếu nó diễn ra tốt, nếu quá trình khám phá diễn ra tốt đẹp và nếu nó có thể chuyển sang khai thác, và khi đó

01:05.640 --> 01:11.130
chúng tôi sẽ có một chức năng lưu để lưu mô hình, tức là lưu bộ não của chiếc xe và cuối cùng là

01:11.130 --> 01:12.180
chức năng tải .

01:12.180 --> 01:14.400
Vì vậy, chúng tôi có một số chức năng để thực hiện.

01:14.400 --> 01:20.730
Chúng ta sẽ tạo một hàm cho mỗi hướng dẫn và hôm nay chúng ta sẽ bắt đầu với hàm init như thường lệ

01:20.730 --> 01:22.740
khi chúng ta tạo một lớp học.

01:22.740 --> 01:33.270
Nhưng trước tiên, chúng ta đừng quên giới thiệu lớp, vì vậy chúng ta sẽ gọi nó là D, Q, N cho mạng Q sâu, sau đó là một số dấu ngoặc đơn,

01:33.270 --> 01:38.700
dấu hai chấm, và ở đó chúng ta đi với hàm đầu tiên của chúng ta.

01:39.300 --> 01:47.790
Vì vậy, chúng ta hãy làm điều này def sau đó nhân đôi gạch dưới trong đó, gấp đôi gạch dưới một lần nữa và dấu ngoặc đơn.

01:47.880 --> 01:52.770
Vì vậy, như bạn đã hiểu trong hàm init này, chúng tôi sẽ giới thiệu các biến được gắn với các đối tượng của

01:52.770 --> 01:53.400
chúng tôi.

01:53.400 --> 01:59.190
Vì vậy, chúng ta sẽ có một vài dòng bắt đầu tự nó và về cơ bản chúng ta sẽ tạo và

01:59.190 --> 02:03.270
khởi tạo tất cả các biến cần thiết để triển khai mạng Q sâu.

02:03.270 --> 02:09.150
Vì vậy, ví dụ, chúng tôi sẽ tạo một đối tượng của mạng của chúng tôi vì tất nhiên chúng tôi cần mạng nơ-ron sâu của

02:09.150 --> 02:12.150
chúng tôi, sau đó chúng tôi sẽ cần bộ nhớ của chúng tôi.

02:12.150 --> 02:14.490
Chúng tôi sẽ tạo một biến khác cho bộ nhớ.

02:14.490 --> 02:17.610
Vì vậy, chúng ta sẽ có một biến khác tự là bộ nhớ.

02:17.610 --> 02:20.280
Nhưng đó không phải là tất cả những gì chúng tôi sẽ phải tạo ra.

02:20.280 --> 02:24.660
Một số biến cho trạng thái cuối cùng, phần cuối cùng và phần thưởng cuối cùng.

02:24.690 --> 02:30.150
Đó là tất nhiên, bạn biết đấy, các biến mà bạn thấy trong thuật toán học sâu.

02:30.630 --> 02:31.710
Và sau đó là gì nữa?

02:31.710 --> 02:37.470
Bạn biết đấy, chúng tôi cũng sẽ cần một trình tối ưu hóa để thực hiện giảm độ

02:37.470 --> 02:44.190
dốc ngẫu nhiên để cập nhật các trọng số theo mức độ mà chúng sẽ gây ra lỗi khi AI mắc lỗi.

02:44.190 --> 02:50.220
Và sau đó tôi nghĩ rằng về cơ bản đó là các biến mà bây giờ chúng ta cần để tạo một khởi tạo.

02:50.220 --> 02:54.270
Nhưng trong hàm init này, chúng ta sẽ nhập một vài đối số.

02:54.270 --> 02:59.910
Đầu tiên, như thường lệ, là đối số đề cập đến đối tượng của chúng ta.

02:59.940 --> 03:05.130
Vì bạn biết đấy, chúng ta sẽ tạo một đối tượng của lớp mạng.

03:05.130 --> 03:12.000
Chà, vì lớp mạng nhận làm đối số trong hàm init, đầu vào, kích thước và hành động kết thúc.

03:12.000 --> 03:13.560
Chà, ở đây cũng vậy.

03:13.560 --> 03:18.750
Khi tạo một đối tượng của lớp mạng, chúng ta sẽ cần chọn một đối số kích thước đầu vào trong một đối

03:18.750 --> 03:19.860
số hành động NB.

03:19.890 --> 03:22.290
Vì vậy, chúng tôi chỉ có thể sao chép chúng.

03:23.740 --> 03:24.400
Và.

03:25.450 --> 03:26.380
Đối mặt với chúng ở đây.

03:26.500 --> 03:27.470
Và chúng ta bắt đầu.

03:27.490 --> 03:32.950
Vì vậy, những đối số này bây giờ cũng sẽ trở thành một số đối số của lớp khác nhau.

03:32.950 --> 03:39.130
Bất cứ khi nào chúng tôi tạo một số đối tượng trong tương lai của lớp hiện tại, đó là một số mô hình học sâu trong

03:39.130 --> 03:44.800
tương lai, nơi chúng tôi sẽ cần chỉ định kích thước đầu vào, mà tôi nhắc nhở là số kích thước trong các vectơ đang

03:44.800 --> 03:50.590
mã hóa trạng thái của bạn, trạng thái đầu vào của bạn và một số hành động, là số lượng các hành động có thể

03:50.590 --> 03:52.890
xảy ra mà ô tô có thể thực hiện.

03:52.900 --> 03:57.610
Vì vậy, tôi nhắc nhở những điều này là đi bên trái, đi thẳng hoặc đi bên phải.

03:58.030 --> 03:59.050
Được rồi, hoàn hảo.

03:59.050 --> 04:04.580
Sau đó, bạn biết đấy, chúng ta sẽ tạo một đối tượng của lớp bộ nhớ phát lại để tạo đối tượng bộ nhớ để lấy

04:04.580 --> 04:07.090
bộ nhớ của chúng ta về các quá trình chuyển đổi.

04:07.240 --> 04:13.390
Và trong hàm init, chúng ta có đối số dung lượng, nhưng vì chúng ta sẽ chỉ sử dụng nó một lần nên thực sự

04:13.390 --> 04:19.780
khi chúng ta tạo bộ nhớ chứ không phải ở bất kỳ đâu sau đó, chúng ta sẽ không cần chỉ định đối số dung lượng.

04:19.780 --> 04:25.330
Chúng tôi có thể làm điều này, nhưng chúng tôi sẽ nhập trực tiếp số lượng chuyển đổi mà chúng tôi muốn bộ nhớ của chúng tôi có.

04:26.020 --> 04:32.230
Nhưng sau đó chúng ta cần một đối số ít hơn, đó là tham số gamma trong mô hình học sâu.

04:32.260 --> 04:36.110
Hãy nhớ rằng, tham số gamma này là hệ số trễ.

04:36.130 --> 04:38.020
Đó là tham số của phương trình.

04:38.020 --> 04:42.830
Và do đó chúng tôi sẽ đặt nó ở đây vì chúng tôi sẽ sử dụng nó sau vài lần.

04:42.850 --> 04:44.770
Vì vậy, chúng ta hãy đặt nó ở đây.

04:44.800 --> 04:46.690
Chúng tôi sẽ gọi nó là Gamma.

04:46.960 --> 04:52.750
Vì vậy, đó chỉ là tên của đối số và ở đó, tất cả các đối số sẽ cần cho hàm

04:52.750 --> 04:53.520
init này.

04:53.530 --> 04:59.980
Vì vậy, điều đó có nghĩa là bất cứ khi nào chúng ta tạo mô hình học sâu của mình, đó là bất cứ khi nào chúng ta tạo một đối

04:59.980 --> 05:01.270
tượng mới của lớp hiện tại.

05:01.270 --> 05:07.750
Chà, chúng ta sẽ cần chỉ định dưới dạng các đối số là kích thước đầu vào, số lượng hành động và tham số gamma, và chúng ta

05:08.050 --> 05:10.330
sẽ sớm nhập các giá trị thực cho chúng.

05:11.020 --> 05:11.410
Được rồi.

05:11.410 --> 05:13.810
Vì vậy, bây giờ chúng ta hãy đi vào bên trong hàm init.

05:14.050 --> 05:14.320
Được chứ.

05:14.320 --> 05:16.330
Vì vậy, bây giờ về cơ bản điều này sẽ được dễ dàng.

05:16.330 --> 05:20.920
Chúng tôi sắp tạo một khởi tạo, tất cả các biến mà chúng tôi cần.

05:20.920 --> 05:22.710
Và vì vậy hãy bắt đầu với cái đầu tiên.

05:22.720 --> 05:26.010
Hãy bắt đầu với gamma thực sự là hệ số trễ.

05:26.020 --> 05:31.680
Vì vậy, vì đây là một biến, chúng ta muốn được gắn vào đối tượng của chúng ta, chúng ta bắt đầu với self.

05:31.690 --> 05:35.860
Vì vậy, gamma sẽ là một biến số của mô hình hiện tại của chúng tôi.

05:35.890 --> 05:42.760
Vì vậy, gamma tương đương với các đối số sẽ được đưa vào khi tạo một đối tượng của lớp.

05:42.760 --> 05:46.680
Vì vậy, gamma và ở đó chúng ta đi với đối số thứ hai.

05:46.690 --> 05:50.440
Vì vậy, đối số thứ hai sẽ là cửa sổ phần thưởng.

05:50.590 --> 05:52.240
Vậy cửa sổ phần thưởng này là gì?

05:52.270 --> 05:57.970
Chà, đó sẽ là cửa sổ trượt về giá trị trung bình của 100 phần thưởng cuối cùng, mà chúng tôi sẽ sử dụng

05:57.970 --> 06:00.910
chỉ để đánh giá sự phát triển của hiệu suất AI.

06:00.910 --> 06:06.190
Bạn biết đấy, chúng tôi sẽ có ý nghĩa của phần thưởng trong cửa sổ phần thưởng này sẽ trượt theo thời gian.

06:06.190 --> 06:11.620
Và những gì chúng tôi muốn quan sát là giá trị trung bình của 100 phần thưởng cuối cùng tăng dần theo thời gian.

06:11.650 --> 06:18.070
Vì vậy, hãy khởi tạo nó với phần thưởng tự chấm, cửa sổ gạch dưới.

06:18.430 --> 06:25.150
Và vì đây sẽ là một cửa sổ trượt về giá trị trung bình đang phát triển của 100 phần thưởng cuối cùng, nên chúng tôi sẽ

06:25.150 --> 06:31.660
khởi tạo nó dưới dạng một danh sách trống và sau đó chúng tôi sẽ thêm giá trị trung bình của phần thưởng theo thời gian.

06:32.770 --> 06:35.190
Được rồi, thú vị hơn.

06:35.200 --> 06:37.420
Hãy tạo mạng nơ-ron của chúng ta.

06:37.420 --> 06:43.600
Vì vậy, chúng tôi sẽ gọi nó là mô hình tự chấm, vì về cơ bản đó là trung tâm của mô hình.

06:43.600 --> 06:44.980
Vì vậy, tôi gọi nó là mô hình.

06:45.770 --> 06:51.290
Và mô hình này sẽ không là gì khác hơn là một đối tượng của lớp mạng.

06:51.290 --> 06:59.300
Và để tạo một đối tượng như vậy, chúng ta lấy mạng lớp của chúng ta, sau đó là dấu ngoặc, và ở đây chúng ta chỉ

06:59.300 --> 07:01.610
nhập các đối số của lớp mạng.

07:01.610 --> 07:07.850
Nhưng chúng tôi đặt các đối số này trong các đối số của hàm init và do đó chúng tôi chỉ

07:07.850 --> 07:12.410
cần sao chép chúng ngay tại đây và chỉ cần dán chúng vào lớp mạng.

07:12.980 --> 07:13.850
Và chúng ta bắt đầu.

07:13.850 --> 07:19.280
Với dòng mã này, chúng tôi tạo ra một mạng nơ-ron cho mô hình học sâu của mình.

07:20.020 --> 07:20.760
Hoàn hảo.

07:20.770 --> 07:22.620
Sau đó, chúng ta hãy tạo một bộ nhớ.

07:22.630 --> 07:28.930
Vì vậy, một lần nữa, chúng ta sẽ tạo một biến mới mà chúng ta gọi là bộ nhớ tự chấm.

07:29.710 --> 07:34.090
Và một lần nữa, đây sẽ là một đối tượng của lớp bộ nhớ phát lại.

07:34.090 --> 07:40.210
Vì vậy, chúng ta hãy chỉ lấy tên của lớp của chúng ta, hãy sao chép nó, hãy dán nó vào đây.

07:40.210 --> 07:46.720
Và trong một số dấu ngoặc đơn, chúng ta cần nhập dung lượng vì dung lượng là một đối số của hàm init và đó

07:46.720 --> 07:49.660
là đối số duy nhất chúng ta cần nhập ở đây.

07:49.990 --> 07:51.910
Vậy chúng ta sẽ chọn công suất nào?

07:51.910 --> 07:57.370
Hãy nhớ rằng điều đó tương ứng với số lần chuyển đổi, số lượng sự kiện, ít trạng thái hơn, trạng thái mới, ít

07:57.370 --> 07:59.320
hành động hơn và ít phần thưởng hơn.

07:59.620 --> 08:08.710
Và vì vậy, như đã đề cập trong một trong các hướng dẫn trước, chúng ta sẽ đưa 100.000, 100.000 chuyển đổi vào bộ nhớ, sau đó chúng

08:08.710 --> 08:15.040
tôi sẽ lấy mẫu từ bộ nhớ này để lấy một số lượng nhỏ các chuyển đổi ngẫu nhiên và

08:15.040 --> 08:17.350
đó là mô hình sẽ học.

08:18.080 --> 08:18.500
Được chứ.

08:18.590 --> 08:20.170
Vì vậy, bây giờ chúng tôi có bộ nhớ của chúng tôi.

08:20.180 --> 08:20.960
Hoàn hảo.

08:20.990 --> 08:23.090
Bây giờ hãy lấy trình tối ưu hóa của chúng tôi.

08:23.180 --> 08:28.700
Vì vậy, một lần nữa, tự chúng tôi tạo một biến mới mà chúng tôi gọi là trình tối ưu hóa.

08:29.480 --> 08:35.200
Vì vậy, Trình tối ưu hóa là một biến khác của GQ trong tương lai của chúng ta, một đối tượng tự là trình tối ưu hóa.

08:35.210 --> 08:43.370
Và bây giờ nếu chúng tôi quay trở lại, bạn có thể thấy rằng chúng tôi đã nhập ngọn đuốc đó là Optim, là một mô-đun của ngọn đuốc chứa

08:43.370 --> 08:46.940
tất cả các công cụ để thực hiện giảm độ dốc ngẫu nhiên.

08:46.940 --> 08:54.200
Vì vậy, tất nhiên nó chứa một số trình tối ưu hóa và chúng tôi đã cho nó tối ưu hóa phím tắt và do đó ở

08:54.200 --> 09:01.460
đây những gì chúng tôi sẽ làm là lấy mô hình Optim là ngọn đuốc mà Optim và từ mô-đun này, chúng tôi sẽ lấy một trong

09:01.460 --> 09:02.990
các trình tối ưu hóa.

09:02.990 --> 09:05.510
Vì vậy, như bạn có thể thấy, tất cả chúng đều được liệt kê ở đây.

09:05.630 --> 09:07.280
Nhiều người trong số họ là xuất sắc.

09:07.280 --> 09:10.400
Ví dụ, cánh tay chống là một trình tối ưu hóa tuyệt vời.

09:10.430 --> 09:15.860
Đó là, ví dụ, rất được khuyến khích cho các mạng nơ-ron thông thường hoặc học sâu không giám sát.

09:15.980 --> 09:22.040
Nhưng cái khác tuyệt vời và chúng tôi sẽ chọn là trình tối ưu hóa nguyên tử.

09:22.310 --> 09:26.330
Đó là cái bạn sẽ thấy rằng với cái này bạn sẽ có được một chiếc xe tự lái tốt.

09:26.330 --> 09:29.120
Nhưng một lần nữa, bạn hoàn toàn được hoan nghênh để thử những cái khác.

09:29.120 --> 09:32.600
Bạn có thể thử các cánh tay chống, nhưng đối với mô hình của chúng tôi, chúng tôi sẽ chọn nguyên tử.

09:32.600 --> 09:37.100
Vì vậy, tôi nhấn enter và trên thực tế, bạn nhận thấy có chữ A viết hoa ở đây.

09:37.100 --> 09:40.340
Đó là bởi vì chúng ta đang tạo một đối tượng của lớp nguyên tử.

09:40.340 --> 09:44.780
Đây là một lớp, nhưng bản thân đối tượng sẽ là một trình tối ưu hóa nguyên tử.

09:44.780 --> 09:47.930
Nhưng vì đây là một lớp, chúng ta cần nhập một số đối số.

09:47.930 --> 09:54.350
Các đối số của lớp nguyên tử và các đối số là tất cả các tham số có thể tùy chỉnh trình tối ưu hóa nguyên

09:54.350 --> 09:55.130
tử của bạn.

09:55.130 --> 10:00.230
Vì vậy, ví dụ, đó thường là tốc độ học tập, phân rã hoặc một số thông số khác.

10:00.230 --> 10:05.510
Và bên cạnh việc lấy tất cả các tham số của mô hình của chúng tôi, chúng tôi sẽ chỉ định một tỷ lệ học tập.

10:05.720 --> 10:12.650
Vì vậy, nói về các tham số của mô hình của chúng tôi, chúng tôi có thể lấy chúng bằng mô hình tự chấm.

10:12.650 --> 10:17.330
Vì vậy, đó là mô hình chúng tôi đã tạo ở đây, mô hình tự học từ lớp mạng của chúng tôi.

10:17.330 --> 10:18.800
Vì vậy, mô hình tự học.

10:18.800 --> 10:26.720
Và sau đó để đánh giá các tham số của mô hình, chúng ta thêm một dấu chấm khác và sau đó là các tham số với một số dấu ngoặc đơn

10:26.750 --> 10:27.770
rất đơn giản.

10:27.980 --> 10:34.880
Vì vậy, đó chỉ là kết nối trình tối ưu hóa nguyên tử với mạng nơ-ron của chúng tôi, mạng mà chúng tôi đã tạo ở đây.

10:35.720 --> 10:42.130
Và sau đó, như chúng ta vừa đề cập, chúng ta sẽ thêm một tốc độ học và đối số cho

10:42.140 --> 10:49.130
điều này là l r và chúng ta sẽ đặt nó bằng một giá trị sao cho việc học không diễn ra quá nhanh.

10:49.160 --> 10:53.630
Nếu chúng ta nhận được tỷ lệ học tập quá lớn, thì AI sẽ không học đúng cách.

10:53.630 --> 10:58.730
Chúng tôi muốn cho AI của mình một khoảng thời gian để khám phá, học hỏi từ những sai lầm của nó.

10:58.730 --> 11:04.100
Bạn biết đấy, khi chúng tôi trừng phạt nó, khi nó mắc một số lỗi, chẳng hạn như đi lên cát

11:04.100 --> 11:08.690
hoặc đến quá gần bức tường, chúng tôi muốn cho AI một thời gian để học hỏi.

11:08.690 --> 11:11.930
Chúng tôi muốn đợi mạng nơ-ron cập nhật chính xác.

11:11.930 --> 11:20.480
Và vì vậy, một giá trị tốt cho tỷ lệ học tập mà tôi đã nhận được sau khi thử một vài trong số chúng là 0. 01 cái.

11:21.050 --> 11:21.410
Được rồi.

11:21.410 --> 11:24.500
Và đó là tất cả những gì chúng ta cần để tạo một trình tối ưu hóa.

11:24.500 --> 11:28.130
Vì vậy, về cơ bản chúng ta đang tạo một đối tượng của lớp nguyên tử.

11:28.400 --> 11:28.910
Tuyệt quá.

11:28.910 --> 11:35.750
Và sau đó ba biến cuối cùng mà chúng ta cần là các biến tạo nên các sự kiện chuyển đổi của chúng ta.

11:35.930 --> 11:39.920
Vì vậy, đó là trạng thái cuối cùng, phần cuối cùng và phần thưởng cuối cùng.

11:39.920 --> 11:44.690
Và về cơ bản đó là những gì chúng ta sẽ tạo bây giờ và chúng ta sẽ chỉ cần khởi tạo chúng.

11:45.050 --> 11:46.820
Vì vậy, hãy bắt đầu với buổi hẹn hò cuối cùng.

11:46.820 --> 11:55.430
Ngày cuối cùng chúng ta sẽ gọi nó là ngày tự chấm, trạng thái gạch dưới cuối cùng và sau đó chúng ta sẽ khởi tạo nó như thế

11:55.430 --> 11:55.910
nào?

11:55.910 --> 12:03.440
À, hãy nhớ rằng, trạng thái cuối cùng là một vectơ có năm chiều, một vectơ đang mã hóa một trạng thái

12:03.440 --> 12:04.670
của môi trường.

12:04.670 --> 12:10.640
Và xin nhắc lại, năm kích thước này là ba tín hiệu của ba cảm biến

12:10.640 --> 12:14.540
trái, thẳng và phải, định hướng và định hướng trừ.

12:14.990 --> 12:20.990
Vì vậy, đây là một vectơ theo nghĩa trực quan, nhưng đối với PyTorch, nó cần nhiều hơn một vectơ.

12:21.020 --> 12:23.600
Nó thực sự cần phải là một ngọn đuốc căng.

12:23.600 --> 12:29.930
Nhưng nó không chỉ cần là một máy căng đuốc, mà nó còn cần phải có thêm một chiều nữa mà

12:29.930 --> 12:33.350
tôi thích gọi là chiều giả tương ứng với lô.

12:33.350 --> 12:38.270
Và đó là bởi vì trạng thái cuối cùng sẽ là đầu vào của mạng nơ-ron.

12:38.270 --> 12:44.180
Nhưng khi làm việc với mạng nơ-ron nói chung, dù là với TensorFlow carry hay PyTorch, thì các

12:44.180 --> 12:47.990
vectơ đầu vào không thể là một vectơ đơn giản.

12:47.990 --> 12:49.490
Nó phải được trong một đợt.

12:49.610 --> 12:57.650
Mạng chỉ có thể chấp nhận hàng loạt các quan sát đầu vào và do đó không chỉ chúng ta sẽ tạo một tensor cho

12:57.650 --> 13:04.430
các vectơ trạng thái đầu vào, mà chúng ta cũng sẽ tạo thứ nguyên giả này tương ứng với lô.

13:05.000 --> 13:09.530
Vì vậy, hãy làm điều này và bắt đầu bằng cách khởi tạo một tensor ngọn đuốc.

13:09.530 --> 13:12.230
Vì vậy, để làm được điều này, không có gì đơn giản hơn.

13:12.230 --> 13:21.770
Chúng tôi sử dụng thư viện ngọn đuốc của chúng tôi, sau đó chấm, và sau đó chúng tôi sẽ sử dụng lớp tensor vì như bạn có thể đoán,

13:21.770 --> 13:27.650
điều này sẽ tạo ra một đối tượng mới của lớp tensor là một đối tượng tensor.

13:27.980 --> 13:29.020
Và trong lớp tensor này.

13:29.180 --> 13:34.380
Chúng ta cần nhập một đối số sẽ chỉ định kích thước của tensor của bạn.

13:34.400 --> 13:38.620
Bạn có thể hình dung một tensor giống như một mảng có một kiểu duy nhất.

13:38.630 --> 13:45.590
Nhưng về cơ bản những gì sẽ đại diện bây giờ, tất nhiên là trạng thái đầu vào này, bạn có thể xem nó như một vectơ.

13:45.980 --> 13:49.290
Và do đó, để xác định số phần tử tensor này phải có.

13:49.310 --> 13:54.410
Tất nhiên, chúng ta cần sử dụng kích thước đầu vào, vì kích thước đầu vào chính xác là số kích

13:54.410 --> 13:57.140
thước của các vectơ trạng thái đầu vào của chúng ta.

13:57.350 --> 13:58.940
Bây giờ tôi nên nói cảm biến.

13:58.940 --> 14:05.420
Và vì vậy, những gì chúng ta chỉ cần nhập vào lớp tensor của chúng ta để tạo đối tượng tensor.

14:05.810 --> 14:07.160
Đó là kích thước đầu vào.

14:07.310 --> 14:10.340
Và sau này, kích thước đầu vào sẽ bằng năm.

14:11.190 --> 14:12.220
Được rồi, vậy là tốt rồi.

14:12.240 --> 14:13.520
Đó là điều đầu tiên được thực hiện.

14:13.530 --> 14:16.920
Chúng tôi vừa khởi tạo một tensor, như nó phải như vậy.

14:17.310 --> 14:19.920
Nhưng sau đó, hãy nhớ rằng, chúng ta cần phải làm một điều khác.

14:19.920 --> 14:26.010
Chúng ta cần tạo ra thứ nguyên giả đó, bởi vì đây là thứ mà mạng sẽ mong đợi cho các đầu

14:26.010 --> 14:31.980
vào của nó và để tạo ra một thứ nguyên duy nhất này, nhân tiện, phải là thứ nguyên đầu tiên.

14:31.980 --> 14:37.650
Bạn biết đấy, thứ nguyên giả tương ứng với lô sẽ là thứ nguyên đầu tiên của biến cuối cùng này.

14:38.040 --> 14:42.960
Để làm điều này, chúng ta chỉ cần thêm dấu chấm sau đó và bóp.

14:44.000 --> 14:49.400
Và sau đó trong một số dấu ngoặc đơn, chúng ta cần nhập chỉ số của thứ nguyên mơ hồ này.

14:49.400 --> 14:54.380
Và như tôi vừa nói, chiều giả này phải là chiều đầu tiên của trạng thái.

14:54.650 --> 15:02.060
Và vì các chỉ mục trong Python bắt đầu bằng 0, chúng ta cần nhập 0 để thứ nguyên mới này trở thành thứ

15:02.060 --> 15:03.140
nguyên đầu tiên.

15:03.290 --> 15:09.260
Vì vậy, chúng ta có thứ nguyên đầu tiên tương ứng với lô và sau đó là thứ nguyên tương ứng với tensor,

15:09.260 --> 15:13.280
thứ nguyên này sẽ chứa năm phần tử của trạng thái đầu vào của bạn.

15:13.280 --> 15:16.820
Có ba định hướng tín hiệu và định hướng trừ.

15:17.120 --> 15:22.640
Và sau đó chúng tôi bắt đầu, chúng tôi khởi tạo các trạng thái đầu vào của chúng tôi một cách hoàn hảo.

15:23.060 --> 15:25.460
Và sau đó hai biến để đi.

15:25.460 --> 15:31.730
Và điều đó sẽ dễ dàng hơn nhiều vì biến tiếp theo là hành động cuối cùng.

15:31.970 --> 15:36.110
Vì vậy, đó là một biến mới mà chúng tôi đã tạo cho hành động cuối cùng của đối tượng của chúng tôi.

15:36.230 --> 15:43.430
Và hãy nhớ rằng, trong hướng dẫn đầu tiên của phần này, tôi đã nói với bạn rằng các hành động sẽ

15:43.430 --> 15:51.230
bằng không một hoặc hai và sau đó sử dụng vectơ xoay hai hành động, chúng tôi sẽ chuyển đổi các chỉ mục của

15:51.230 --> 15:57.830
các hành động này thành các góc quay, mà tôi nhắc nhở chúng ta là số 0 20 hoặc -20.

15:57.830 --> 16:00.800
Chúng tôi thực sự có thể làm mới bộ nhớ của mình với điều đó.

16:00.950 --> 16:02.930
Chà, nó chính xác ở đây.

16:02.930 --> 16:04.370
Hành động thông qua xoay.

16:04.640 --> 16:08.990
Nếu hành động bằng 0, tốt, điều này sẽ tương ứng với chỉ mục đầu tiên ở đây.

16:08.990 --> 16:14.240
Vì vậy, số không, nếu hành động là một, điều này sẽ tương ứng với chỉ mục, một trong các vectơ này.

16:14.240 --> 16:15.380
Vì vậy, 20 độ.

16:15.380 --> 16:18.950
Và nếu hành động là hai, chúng ta sẽ nhận được -20 độ.

16:18.950 --> 16:22.700
Đó sẽ là góc quay của chiếc xe của chúng ta khi chúng ta chơi hành động.

16:23.380 --> 16:24.070
Được rồi.

16:24.070 --> 16:30.370
Và do đó, vì hành động sẽ bằng không một hoặc hai, nên hành động do đó là một

16:30.400 --> 16:31.600
số đơn giản.

16:31.600 --> 16:35.370
Và rất đơn giản, chúng ta có thể khởi tạo nó bằng 0.

16:35.380 --> 16:38.140
Chúng tôi không cần tạo bất kỳ tensor nào ở đây hay bất kỳ thứ gì khác.

16:38.140 --> 16:40.750
Chúng ta chỉ cần khởi tạo nó bằng 0.

16:41.170 --> 16:44.410
Và cuối cùng, đó là phần thưởng cuối cùng.

16:44.410 --> 16:48.190
Vì vậy, tự chấm phần thưởng cuối cùng.

16:48.700 --> 16:49.660
Chúng ta bắt đầu.

16:49.660 --> 16:56.230
Và một lần nữa, phần thưởng là một số thực, mà tôi nhắc nhở là giữa trừ một và cộng một.

16:56.230 --> 16:57.670
Vì vậy, đó là con số một lần nữa.

16:57.670 --> 17:02.830
Và đối với hành động, chúng ta sẽ khởi tạo nó bằng 0 và chúng ta bắt đầu.

17:02.830 --> 17:06.070
Xin chúc mừng là chức năng init đã sẵn sàng.

17:06.070 --> 17:08.740
Vì vậy, bây giờ chúng tôi đã sẵn sàng để chuyển sang những thứ thú vị.

17:08.740 --> 17:16.210
Và thực ra, điều quan trọng nhất đối với tôi đó là quyết định hành động nào sẽ chơi tại mỗi thời điểm, mỗi thời điểm.

17:16.210 --> 17:23.110
T Và đó chính xác là những gì chúng ta sẽ làm trong hướng dẫn tiếp theo bằng cách tạo Phương thức Hành động Chọn.

17:23.230 --> 17:25.240
Vì vậy, chúng ta hãy làm điều này trong hướng dẫn tiếp theo.

17:25.240 --> 17:27.250
Và cho đến khi đó, hãy tận hưởng tôi.
