WEBVTT

00:00.330 --> 00:03.420
こんにちは､ このセクションの最後のチュートリアルへようこそ｡ 

00:03.420 --> 00:12.360
このドキュメントクラスの最後の関数は､ もちろんsave関数の後に当然来るload関数にするつもりです｡

00:12.360 --> 00:17.250
モデルを保存して､ アプリケーションに戻ったときにいつでもロードできるようにしたい｡ 

00:17.250 --> 00:18.660
では､ こうしてみましょう｡ 

00:18.660 --> 00:22.440
デフを作り､ ロードする｡ 

00:22.440 --> 00:31.020
この最後の関数を再びloadと呼びます｡ このload関数は引数としてselfを取り､ このselfが何のためにあるのかは､ おそらく皆さんも想像がつくでしょう｡

00:31.020 --> 00:34.980
まさに､ セーブ機能で保存したものをロードすることになります｡ 

00:34.980 --> 00:39.060
そこで､ 自己のモデル､ そしてもちろん自己のそのオプティマイザーを取り上げることにします｡ 

00:39.270 --> 00:42.330
つまり､ ここでの自分は､ モデルとオプティマイザーのためにあることになる｡ 

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から始めて､ オペレーティングシステムと､ この最後のばかげたファイルにつながるパスを取るわけです｡

01:14.880 --> 01:19.650
つまり､ OSのドットパスは､ まさにワーキングディレクトリフォルダにつながるパスなのです｡ 

01:19.650 --> 01:26.100
だから､ 私の人工知能よりもこのパスのデスクトップであることを懸念している限り､ それはそのフォルダその後モデル1自動運転車､

01:26.100 --> 01:31.770
そしてモジュール1自動運転車のフォルダは､ ファイルの最後のポイントとここにこのフォルダであり､

01:31.770 --> 01:39.330
我々はドットがファイルであるファイルこの1つを追加しようとしている｡

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
それで､ last brain dotを入力しているので､ このファイルleft brain dotが存在すれば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
ですから､ 例えば､ 小さな矢印と､ 3つの小さなドットでチェックポイントを読み込むと言うことができます｡ 

02:35.790 --> 02:36.180
わかりました｡ 

02:36.180 --> 02:40.890
ということで､ あくまでモデルを読み込むということですが､ もちろん､ モデルを読み込むということです｡ 

02:40.890 --> 02:49.560
そこで､ モデルとオプティマイザ､ そしてロードしたものを､ チェックポイント・イコールと呼ぶ変数に入れることにします｡

02:49.560 --> 02:54.900
そして､ そこでload関数を使って､ save関数で保存したものを読み込むことになります｡ 

02:54.900 --> 02:58.950
ということで､ もちろんこれはトーチライブラリの関数です｡ 

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
このオプティマイザを､ この最後のばかげたファイルにある重みとパラメータで更新することです｡

04:05.000 --> 04:07.910
ですから､ 単純にこの2つのアップデートを別々に行うだけでいいのです｡ 

04:07.910 --> 04:11.900
そのために､ トーチモジュールにあるメソッドを使うんだ｡ 

04:11.900 --> 04:18.560
そこで､ ロードステートDictと呼ばれるこのメソッドを使用できるようにするための継承が行われることになります｡

04:18.560 --> 04:25.250
そして､ スローステート法により､ モデルとオプティマイザーのすべてのパラメータを更新することができるようになるのです｡ 

04:25.250 --> 04:28.580
では､ これを実行し､ まずモデルを更新してみましょう｡ 

04:28.580 --> 04:35.870
そこで､ 私たちのモデル（self thatモデルはtorchモジュールのメソッドを継承しているので､ self taughtモデル）を使って､

04:35.870 --> 04:40.490
load state dictメソッドを使用します｡

04:40.490 --> 04:43.130
ということで､ 継承している方法です｡ 

04:43.130 --> 04:48.380
そして､ この方法のおかげで､ モデルのすべてのパラメータ､ つまりすべての重みを更新することができるのです｡ 

04:48.530 --> 04:56.030
そして､ このload静的メソッドに入力する必要があるのは､ load関数の結果であるチェックポイント変数です｡

04:56.030 --> 05:04.190
チェックポイントはブラケットで､ モデルに対応するキーの名前を入力する必要があります｡ つまり､ selfに対応するモデル､

05:04.190 --> 05:09.410
state dict､ そしてstate 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モジュールのメソッドを継承したload state decayメソッドを使い､ state

05:47.670 --> 05:56.930
dictではなく､ optimizerに対応するキー､ つまりoptimizerのチェックポイントにこの関数を適用しています｡

05:56.940 --> 06:01.680
そこで､ ここではdictをmiserまでで置き換えているだけです｡ 

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
そこで､ チェックポイントが見つかりませんでしたというような印字と､ 必要であれば小さな点を3つ印字するだけです｡ 

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
I.
