今日、Windows オペレーティング システムでモデルを実行した後、モデルを保存しようとしましたが、次のエラーが発生しました。
本当に困惑しています!
これは pickle に関するエラーなので、インターネットで pickle に関する情報を検索しました。
Pickle は、オブジェクトをファイルとしてディスクに保存する単純な永続化機能を提供します。
ただし、Windows オペレーティング システムでは、プロセスはソケット オブジェクトを使用するため、ソケット オブジェクトをシリアル化できません。(対照的に、Linux オペレーティング システムのプロセスはフォーク オブジェクトを使用するため、シリアル化できます)
解決:
別のPythonスクリプトファイルにあるネットワーク構造定義のコードを切り取り(またはコピー+コメント)、from..importで元のファイルにネットワークをインポートします。
小さな栗:
私のtest01ファイルのネットネットワークの定義は以下のようになっており、上記のエラーが発生しました。
class Net(torch.nn.Module):
def __init__(self, n_feature, n_output):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, 100)
self.predict = torch.nn.Linear(100, n_output)
def forward(self, x):
out = self.hidden(x)
out = torch.relu(out)
out = self.predict(out)
return out
このコード部分を新しい Python ファイル NetWork に切り取り、次のコードを通じて test01 にインポートします。
from NetWork import Net
そうすればスムーズにモデルを保存できるようになります!