この記事では主にニューラルネットワークを素早く構築するためのPyTorchとその保存方法と抽出方法の詳細な説明を紹介し、参考にさせていただきます。一緒に見てみましょう
モデルをトレーニングし、次回トレーニングに時間を費やすことなく直接使用できるように保存したい場合があります。このセクションでは、PyTorch でニューラル ネットワークをすばやく構築する方法と保存方法について説明します。
1. PyTorch でニューラル ネットワークをすばやく構築する方法
まずは実験用のコードを見てみましょう:
import torch import torch.nn.functional as F # 方法1,通过定义一个Net类来建立神经网络 class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = torch.nn.Linear(n_feature, n_hidden) self.predict = torch.nn.Linear(n_hidden, n_output) def forward(self, x): x = F.relu(self.hidden(x)) x = self.predict(x) return x net1 = Net(2, 10, 2) print('方法1:\n', net1) # 方法2 通过torch.nn.Sequential快速建立神经网络结构 net2 = torch.nn.Sequential( torch.nn.Linear(2, 10), torch.nn.ReLU(), torch.nn.Linear(10, 2), ) print('方法2:\n', net2) # 经验证,两种方法构建的神经网络功能相同,结构细节稍有不同 ''''' 方法1: Net ( (hidden): Linear (2 -> 10) (predict): Linear (10 -> 2) ) 方法2: Sequential ( (0): Linear (2 -> 10) (1): ReLU () (2): Linear (10 -> 2) ) '''
以前は、次のように定義してニューラル ネットワークを構築する方法を学びました。 net クラスでは、最初に super を渡します。この関数は torch.nn.Module モジュールの構築メソッドを継承し、属性を追加してニューラル ネットワークの各層の構造情報を構築し、各層間の接続情報を改善します。 forward メソッドでニューラル ネットワークを定義し、Net クラス オブジェクト メソッドを定義してニューラル ネットワーク構造の構築を完了します。
ニューラル ネットワークを構築するもう 1 つの方法は、簡単な構築方法とも言えますが、torch.nn.Sequential を通じてニューラル ネットワークの構築を直接完了することです。
2 つの方法で構築されたニューラル ネットワークの構造はまったく同じであり、ネットワーク情報は print 関数を通じて印刷できますが、印刷結果は若干異なります。
2. PyTorch ニューラル ネットワークの保存と抽出
ディープ ラーニングを学習および研究するとき、一定期間のトレーニング後により良いモデルが得られたら、当然このモデルを使用したいと考え、モデル パラメーターは保存されます。後で使用するため、ニューラル ネットワークを保存し、モデル パラメーターを抽出して再ロードする必要があります。
まず、ネットワーク構造とそのモデルパラメーターを保存する必要があるニューラルネットワークの定義とトレーニング部分の後に、torch.save() を通じてネットワーク構造とモデルパラメーターを保存する必要があります。保存方法には、ニューラルネットワーク全体の構造情報とモデルパラメータ情報を保存対象とし、ネットワークネットを保存する方法と、ニューラルネットワークの学習モデルパラメータのみを保存する方法があります。保存のオブジェクトは net.state_dict() です。保存された結果は .pkl ファイルの形式で保存されます。
上記2つのセーブ方法に対応しており、リロード方法も2つあります。最初の完全なネットワーク構造情報に対応して、リロード時に torch.load(‘.pkl’) を通じて新しいニューラル ネットワーク オブジェクトを直接初期化できます。モデル パラメーター情報のみを保存する 2 番目の方法に対応して、最初に同じニューラル ネットワーク構造を構築し、net.load_state_dict(torch.load('.pkl')) を通じてモデル パラメーターの再読み込みを完了する必要があります。ネットワークが比較的大きい場合、最初の方法の方が時間がかかります。
コードの実装:
import torch from torch.autograd import Variable import matplotlib.pyplot as plt torch.manual_seed(1) # 设定随机数种子 # 创建数据 x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) y = x.pow(2) + 0.2*torch.rand(x.size()) x, y = Variable(x, requires_grad=False), Variable(y, requires_grad=False) # 将待保存的神经网络定义在一个函数中 def save(): # 神经网络结构 net1 = torch.nn.Sequential( torch.nn.Linear(1, 10), torch.nn.ReLU(), torch.nn.Linear(10, 1), ) optimizer = torch.optim.SGD(net1.parameters(), lr=0.5) loss_function = torch.nn.MSELoss() # 训练部分 for i in range(300): prediction = net1(x) loss = loss_function(prediction, y) optimizer.zero_grad() loss.backward() optimizer.step() # 绘图部分 plt.figure(1, figsize=(10, 3)) plt.subplot(131) plt.title('net1') plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) # 保存神经网络 torch.save(net1, '7-net.pkl') # 保存整个神经网络的结构和模型参数 torch.save(net1.state_dict(), '7-net_params.pkl') # 只保存神经网络的模型参数 # 载入整个神经网络的结构及其模型参数 def reload_net(): net2 = torch.load('7-net.pkl') prediction = net2(x) plt.subplot(132) plt.title('net2') plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) # 只载入神经网络的模型参数,神经网络的结构需要与保存的神经网络相同的结构 def reload_params(): # 首先搭建相同的神经网络结构 net3 = torch.nn.Sequential( torch.nn.Linear(1, 10), torch.nn.ReLU(), torch.nn.Linear(10, 1), ) # 载入神经网络的模型参数 net3.load_state_dict(torch.load('7-net_params.pkl')) prediction = net3(x) plt.subplot(133) plt.title('net3') plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) # 运行测试 save() reload_net() reload_params()
実験結果:
関連する推奨事項:
PyTorchで畳み込みニューラルネットワークCNNを実装する方法
Pyの詳細な説明トーチのバッチ トレーニングとオプティマイザーの比較
以上がPyTorchでニューラルネットワークを素早く構築し、保存・抽出する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
