WEBVTT

00:00.330 --> 00:03.420
大家好, 欢迎学习本节的最后一个教程｡ 

00:03.420 --> 00:09.210
我们将创建这个文档类的最后一个函数, 当然也就是load函数,

00:09.210 --> 00:12.360
它自然会出现在保存函数之后.

00:12.360 --> 00:17.250
您保存了模型, 然后希望在返回应用程序时能够加载它｡ 

00:17.250 --> 00:18.660
所以我们开始吧｡ 

00:18.660 --> 00:22.440
我们要做def, 然后加载｡ 

00:22.440 --> 00:31.020
我们再次调用最后一个函数load, 这个load函数将self作为参数, 您可能猜到这个self是做什么用｡

00:31.020 --> 00:34.980
它将准确地加载保存在保存功能中的内容｡ 

00:34.980 --> 00:39.060
因此, 我们将采用self模型, 当然还有self优化器｡ 

00:39.270 --> 00:42.330
所以这里的self是模型和优化器的｡ 

00:42.780 --> 00:46.290
然后是冒号, 现在让我们加载模型｡ 

00:46.650 --> 00:54.420
由于模型位于文件的最后一个标记中, 因此我们希望确保该文件存在, 因此我们将从该文件开始｡

00:54.420 --> 00:58.230
我们将创建一个F条件以确保该文件存在｡ 

00:58.230 --> 01:04.980
如果它存在, 我们将加载字典中的内容, 也就是最后一个打印文件中的内容｡ 

01:05.280 --> 01:14.880
我们从F开始, 然后我们将得到我们的操作系统和指向最后一个braindead文件的路径｡

01:14.880 --> 01:19.650
因此, OS点路径就是指向工作目录文件夹的路径｡ 

01:19.650 --> 01:26.100
所以就我而言, 这个路径桌面不是我的人工智能, 它是那个文件夹,

01:26.100 --> 01:31.770
然后是一个自动驾驶汽车模型, 然后是一个自动驾驶汽车模块文件夹,

01:31.770 --> 01:39.330
也就是这个文件夹, 这里有文件的最后一个点, 然后我们要添加点, 文件是文件这一个｡

01:39.660 --> 01:40.890
这就是函数｡ 

01:40.890 --> 01:42.570
所以我会加一些括号｡ 

01:42.570 --> 01:49.760
在括号里我会输入文件名, 这个文件名包含了最后一个脑点的模型.

01:50.610 --> 01:53.490
所以我们必须用引号输入｡ 

01:53.610 --> 02:04.470
所以我输入了最后一个大脑点, 如果文件leftbrain点存在, 那么这个文件leftbrain点会返回true, 如果不存在,

02:04.470 --> 02:08.400
那么返回false｡

02:08.400 --> 02:19.590
因此这个if条件意味着, 如果我们在左脑的工作目录中有这个文件, 那么我们来看看在这种情况下会发生什么｡

02:19.590 --> 02:22.380
在这种情况下, 如果这个文件存在｡ 

02:22.380 --> 02:27.450
首先, 我们要打印一些东西来说明我们正在加载模型｡ 

02:27.460 --> 02:35.520
例如, 我们可以说一个小箭头, 然后用三个小点加载检查点｡ 

02:35.790 --> 02:36.180
好吧, 我会的

02:36.180 --> 02:40.890
也就是说, 我们正在加载模型, 然后, 当然, 我们要加载模型｡ 

02:40.890 --> 02:46.650
因此, 模型和优化器, 我们将把我们加载的内容放在一个变量中, 我将把它称为checkpoint

02:46.650 --> 02:49.560
equals｡

02:49.560 --> 02:54.900
我们将在这里使用load函数来加载save函数中保存的内容｡ 

02:54.900 --> 02:58.950
当然, 这是torch库中的一个函数｡ 

02:58.950 --> 03:08.910
这个加载函数的名字就是简单的加载括号, 在括号里, 我们需要输入什么呢？

03:08.910 --> 03:15.840
很简单, 我们需要输入包含保存的模型和优化器的文件｡ 

03:15.990 --> 03:22.080
所以我们只需要输入文件的名称, 就是Last Brain Dot｡ 

03:24.170 --> 03:30.100
让我们打开该页面, 并仅在此文件存在的情况下加载此文件｡ 

03:30.110 --> 03:33.020
这就是为什么我们必须在这里编写if条件｡ 

03:33.770 --> 03:33.980
好吧, 我会的

03:33.980 --> 03:40.460
现在, 我们已经加载了模型和优化器,

03:40.460 --> 03:47.930
接下来我们要分别更新模型和优化器, 因为实际上我们加载了参数, 加载了优化器的权重和参数｡

03:47.930 --> 03:55.880
现在我们需要做的是更新现有的模型,

03:55.880 --> 04:04.700
也就是这个模型和我们现有的优化器, 优化器的参数和权重都在最后一个braindead文件中｡

04:05.000 --> 04:07.910
因此, 我们只需分别进行这两个更新｡ 

04:07.910 --> 04:11.900
为此, 我们将使用火炬模块中的一种方法｡ 

04:11.900 --> 04:18.560
所以这里会有一个继承, 它允许我们使用这个方法, 叫做load state dict｡

04:18.560 --> 04:25.250
慢状态方法将允许我们更新模型和优化器的所有参数｡ 

04:25.250 --> 04:28.580
让我们从更新我们的模型开始｡ 

04:28.580 --> 04:35.870
因此, 我们采用我们的模型, 这是自学模型, 因为该模型继承自torch模块的方法,

04:35.870 --> 04:40.490
以使用加载状态字典方法｡

04:40.490 --> 04:43.130
这就是我们从继承中得到的方法｡ 

04:43.130 --> 04:48.380
多亏了这个方法, 我们要更新模型的所有参数, 也就是所有的权重｡ 

04:48.530 --> 04:56.030
因此, 我们需要在这个load static方法中输入的是检查点变量, 它是load函数的结果｡

04:56.030 --> 05:04.190
检查点, 然后括号, 现在我们需要输入对应于我们的模型的键的名字, 也就是说, 对应于self,

05:04.190 --> 05:09.410
那个模型状态dict, 那个是状态dict｡

05:10.000 --> 05:19.950
所以在检查点和括号中, 我们在记分卡上用引号输入状态, 这行代码将更新你的模型｡

05:19.960 --> 05:22.960
也就是说, 它将更新权重, 即模型的参数｡ 

05:23.290 --> 05:28.240
现在, 我们需要对优化器执行同样的操作, 这将是几乎相同的｡ 

05:28.240 --> 05:30.370
所以我要复制这一行｡ 

05:32.070 --> 05:33.110
根据地如下｡ 

05:33.120 --> 05:39.330
因此, 这次我们将更新的不是模型, 而是优化器本身｡ 

05:39.330 --> 05:40.400
那个优化器｡ 

05:40.410 --> 05:47.670
然后, 我们再次使用从torch模块方法继承的加载状态衰减方法,

05:47.670 --> 05:56.930
并将此函数应用于非状态指令的检查点, 但应用于与优化器对应的键, 即优化器｡

05:56.940 --> 06:01.680
所以在这里我们就把敕令替换成了至多守财奴｡ 

06:02.100 --> 06:02.910
我们走吧｡ 

06:02.910 --> 06:07.560
在这里, 我们更新模型的权重, 在这里, 我们更新优化器的参数｡ 

06:08.220 --> 06:08.910
好极了｡ 

06:08.910 --> 06:15.360
最后, 我们可以像这样打印一点｡ 

06:15.630 --> 06:21.330
最后, 我们只需要说明如果不遵守这个条件会发生什么｡ 

06:21.330 --> 06:24.420
也就是说, 如果没有标记较少的文件｡ 

06:24.420 --> 06:27.990
所以我们只需要添加一个LS then列｡ 

06:29.000 --> 06:33.890
简单地说, 我们只想说, 在那个时代, 没有比这更聪明的人了｡ 

06:34.040 --> 06:42.950
所以我们只需要打印一些东西, 比如找不到检查点, 如果需要的话, 还可以打印三个小点｡ 

06:44.200 --> 06:44.980
好吧, 我会的

06:44.980 --> 06:51.670
这就给了我们一个函数式的加载函数, 主要是一个函数式的上课过程｡ 

06:51.670 --> 06:56.920
现在恭喜你, 因为我们的人工智能已经准备好了｡ 

06:56.950 --> 07:02.050
你们可能听得出来我非常兴奋因为现在是演示的时候了｡

07:02.080 --> 07:08.620
我们刚做了一个大脑, 我们要把这个大脑放在车里, 我们会看到它是如何聪明地在机场和市区之间往返,

07:08.620 --> 07:13.330
不管是哪条路｡

07:13.330 --> 07:15.250
所以我迫不及待地想给你看样带｡ 

07:15.280 --> 07:17.290
这将在下一节介绍｡ 

07:17.290 --> 07:18.580
在那之前, 好好享受吧｡ 

07:18.580 --> 07:19.150
一､ 
