WEBVTT

00:00.300 --> 00:02.280
大家好, 欢迎学习本教程｡ 

00:02.310 --> 00:05.730
好了, 今天我们要做一个函数来保存我们的模型

00:05.760 --> 00:10.980
这将保存汽车的大脑, 以便我们可以重用它, 每当我们退出应用程序｡ 

00:11.190 --> 00:15.720
多亏了这个保存功能, 我们将能够保存模型, 然后退出应用程序｡ 

00:15.720 --> 00:20.340
当我们返回到应用程序时,

00:20.340 --> 00:25.550
由于另一个函数, 也就是在这个函数之后的load函数, 我们将加载训练好的模型的最后一个版本｡

00:25.560 --> 00:31.710
这是非常实用的, 因此让我们将这两个函数设为保存函数和load函数｡

00:32.040 --> 00:35.200
因此, 让我们从本教程中的保存函数开始｡ 

00:35.220 --> 00:38.250
所以又来了一个新的死亡, 然后保存｡ 

00:38.490 --> 00:42.800
然后它需要一个自变量, 这个自变量就是self｡ 

00:42.810 --> 00:50.010
原因是,

00:50.040 --> 00:58.140
我们要保存的不是整个模型, 而是我们的神经网络本身, 这个模型和我们的优化器本身,

00:58.140 --> 01:08.790
因为我们要保存的只是我们在最后一次迭代中更新的最后一个权重, 因为无论何时我们想重用保存的模型, 我们都希望它预测我们已经训练好的权重的作用｡

01:08.880 --> 01:13.140
因此, 我们需要获取这些最新版本的权重, 同时我们还需要获取优化程序的最新版本,

01:13.140 --> 01:16.020
因为它与这些权重相关｡

01:16.590 --> 01:17.790
所以我们开始吧｡ 

01:17.790 --> 01:23.220
我们有我们自己, 所以我们将能够把我们自己, 那个模型和我们自己, 那个优化器｡ 

01:23.340 --> 01:26.970
我们将保存这两个对象和Python字典｡ 

01:26.970 --> 01:32.180
为了保存这两个对象, 我们将使用torch模块中的save函数｡ 

01:32.190 --> 01:42.630
所以我从保存的torch开始, 在括号里我们要输入字典括号, Python中的字典是这样工作的｡

01:42.630 --> 01:45.480
您有一个密钥, 它是您的标识符｡ 

01:45.480 --> 01:46.530
所以这是独一无二的｡ 

01:46.530 --> 01:49.650
对于每个键, 您都有要给予该键的值｡ 

01:49.650 --> 01:56.730
它就像是一个映射函数, 从唯一标识符到您要给予这些标识符的值｡ 

01:56.730 --> 02:04.620
如果你拿一本简单的字典书, 那么, 键就是单词, 值就是单词的定义｡

02:04.620 --> 02:06.000
好吧, 在这里, 那是一样的｡ 

02:06.000 --> 02:12.330
我们将创建两个键, 一个键用于我们要保存的第一个对象, 也就是self model｡ 

02:12.330 --> 02:17.640
第二个要保存的是1/2密钥, 它是self点优化器｡ 

02:17.640 --> 02:20.220
所以我们从第一把钥匙开始｡ 

02:20.220 --> 02:26.310
所以我们要给予这个键命名, 我把它命名为state下划线dict, 因为你会看到我用函数state

02:26.310 --> 02:31.470
dict保存我们的模型保存在字典里.

02:31.470 --> 02:37.980
这是我们的第一个键, 然后给予第一个键赋值.

02:37.980 --> 02:41.760
你也看到了, 我在这里和这里加了点小骗局.

02:41.760 --> 02:44.700
我将添加对象, 即要保存的对象｡ 

02:44.700 --> 02:48.330
所以我想保存的第一个对象是self model｡ 

02:48.450 --> 02:56.580
所以我们可以复制这个自我模型, 并将其粘贴为我们的第一个关键自我的值, 即那个模型｡ 

02:56.610 --> 03:03.690
然后我们添加点状态下划线日期, 在这里, 第一个,

03:03.990 --> 03:09.390
然后我们添加一些括号, 这将在第一个关键状态指令中保存模型的参数｡

03:09.720 --> 03:12.090
现在, 让我们保存优化器｡ 

03:12.090 --> 03:15.240
所以我们要在字典里再加一个键｡ 

03:15.240 --> 03:20.970
要做到这一点, 我们在这里加一个逗号, 然后按回车键, 我们用第二个键｡ 

03:20.970 --> 03:25.290
第二个键, 我们称之为Optimizer｡ 

03:26.060 --> 03:34.540
然后是Colin, 然后我们只需要添加要保存的对象的名称, 即self, 即优化器｡

03:34.550 --> 03:38.420
因此, 我们在这里添加self dot优化器｡ 

03:38.990 --> 03:45.500
为了保存此优化器的参数, 我们在这里再次使用了dot state dict,

03:45.500 --> 03:51.650
然后我们保存了模型, 其中保存了所有权重和优化器｡

03:51.860 --> 03:52.790
好极了｡ 

03:52.940 --> 03:56.300
然后我们将所有这些保存到一个文件中｡ 

03:56.300 --> 04:02.900
为此, 我将向保存函数添加第二个参数,

04:02.900 --> 04:07.380
它将是我们希望保存模型和优化器的文件的名称｡

04:07.400 --> 04:12.860
记得我在第一个单元的第一部分给你们展示了一个快速的演示, 自动驾驶汽车｡ 

04:12.900 --> 04:16.400
你知道吗, 那是我们的演示, 我们只是有一些随机的行动｡ 

04:16.400 --> 04:18.520
所以那还不是一辆自动驾驶汽车｡ 

04:18.530 --> 04:24.850
但是, 请记住, 我点击了保存按钮来保存模型, 这创建了最后一个brain dot

04:24.890 --> 04:29.250
PTA文件, 该文件包含了模型的保存版本｡

04:29.270 --> 04:42.260
所以我在这里添加最后一个下划线brain点PTA, 这样你的模型和优化器就会被保存到这个创建的文件中｡

04:43.220 --> 04:44.660
所以你还没拿到｡ 

04:44.660 --> 04:51.230
但是, 只要您保存模型保存在应用程序中, 就将创建此文件, 这要归功于我们刚刚添加的代码｡

04:51.500 --> 04:52.070
好吧, 我会的

04:52.070 --> 04:53.660
所以现在完美了｡ 

04:53.660 --> 05:01.400
我们有一个保存功能, 将保存您的模型, 通过保存权重和神经网络的优化器来保存您的汽车大脑｡

05:01.400 --> 05:03.410
那实际上是汽车的大脑｡ 

05:03.710 --> 05:04.600
太完美了｡ 

05:04.610 --> 05:08.000
我们现在只剩下一个函数要创建了｡ 

05:08.000 --> 05:09.620
这就是负载函数｡ 

05:09.620 --> 05:13.100
这是因为保存函数没有load函数｡ 

05:13.100 --> 05:17.590
您知道, 如果您无法加载之后保存的内容, 则保存模型是没有意义的｡ 

05:17.600 --> 05:24.920
这是我们旅程的最后一步, 在精彩的演示之前, 我们将在本节的最后一个教程中介绍此load函数｡

05:24.920 --> 05:26.750
我们在下一个教程中再见｡ 

05:26.750 --> 05:28.520
在那之前, 好好享受我｡ 
