Closed T-H-ash closed 1 year ago
ご連絡ありがとうございます。 4章の超解像を担当いたしました、もちまると申します。 基本的にwindowsでの動作はサポート外ではありますが、今回は対応させていただきます。
>上記リンク先(isuue)の議論によれば実行部分をif name == "main"で括ればよいとの指摘もありますが、問題部分のセル(In[44])を括っても相変わらずエラーが出て正しく動作しません。In[42]「データセット」からIn[44]「学習」までをまとめてmainで括っても動作しません。
一点お伺いしたいのですが、こちらで実行した際にも同様に
BrokenPipeError: [Errno 32] Broken pipe
のエラーが出たということでしょうか?
こちらの記事が参考になるかもしれません。 https://qiita.com/fmfm_mdk/items/726aeacf8f6efe10009e
返信が遅くなり申し訳ありません!ご対応ありがとうございます!
一点お伺いしたいのですが、こちらで実行した際にも同様に
BrokenPipeError: [Errno 32] Broken pipe
のエラーが出たということでしょうか?
その通りです。In[42]
からIn[44]
までのひとつのセルにまとめ、if name == "main":
で括って実行したところ、まずはIn[43]
の出力であるところの「ESRGAN modelのSummary」が表示され、のちにissue本文にあるようなエラー文(BrokenPipeError: [Errno 32] Broken pipe
)が表示されました。
実行セルは以下のようでした ↓
# 実行セル
if __name__ == "__main__":
train_dataloader = DataLoader(
ImageDataset(train_data_dir, hr_shape=hr_shape),
batch_size=opt.batch_size,
shuffle=True,
num_workers=opt.n_cpu,
)
test_dataloader = DataLoader(
TestImageDataset(test_data_dir),
batch_size=1,
shuffle=False,
num_workers=opt.n_cpu,
)
# ESRGANを呼び出す
esrgan = ESRGAN(opt)
for epoch in range(1, opt.n_epoch + 1):
for batch_num, imgs in enumerate(train_dataloader):
batches_done = (epoch - 1) * len(train_dataloader) + batch_num
# 事前学習
if batches_done <= opt.warmup_batches:
esrgan.pre_train(imgs, batches_done, batch_num)
# 本学習
else:
esrgan.train(imgs, batches_done, batch_num)
# 高解像度の生成画像の保存
if batches_done % opt.sample_interval == 0:
for i, imgs in enumerate(test_dataloader):
esrgan.save_image(imgs, batches_done)
# 学習した重みの保存
if batches_done % opt.checkpoint_interval == 0:
esrgan.save_weight(batches_done)
リンク先を拝見しました。
DataLoaderのインスタンス化とDatasetクラスの定義を同じ.pyで行ってはいけない.
この部分が具体的な指摘でしょうか。In[42]をmainで括ることよりも、Datasetクラス(本プログラムではImageDataset
とTestImageDataset
)を別の.pyファイルにまとめて置くことが必要であるのかもしれません。試してみます。
ぜひ試してみてください!
概要
素晴らしい本をありがとうございます。本書がLinux向けであることは承知していますが、一部の変更を加えた上でWindows 10 のローカルPCにて実行しようと試みたところ、解決できないエラーが発生しました(Google Colab上ではエラーなく動作しました)。Linux環境もPytorchも初学者で慣れず、見当違いな質問である可能性がありますが、アドバイスを頂けたら幸いです。
再現
環境
実行コード
chapter4/section4_3_ESRGAN.ipynb
↑ 超解像タスクに関心があるため、Chap4から実行しています。
コードの変更点
input_dir
及びoutput_dir
を定義。As is
In[12]
のラベルやIn[23]
のデータセット画像の表示を正しく行える。学習時まではその他もエラーがない。In[44]
「学習」でエラー↑ エラー文のPATH内にある
pytorch17
は私が設定した仮想環境名です。pytorchのisuue などを参考にしながら、
In[40]
「パラメータ」内のself.n_cpu
を8から0へ変更したところ、エラーをはかずに学習が進む。しかし、multiprocessingができないため訓練時間が長くなる。マシンのCPUのコア数は12なので、デフォルトのself.n_cpu = 8
でも動作するはずなのですが...泣上記リンク先(isuue)の議論によれば実行部分を
if __name__ == "__main__"
で括ればよいとの指摘もありますが、問題部分のセル(In[44]
)を括っても相変わらずエラーが出て正しく動作しません。In[42]
「データセット」からIn[44]
「学習」までをまとめてmainで括っても動作しません。To be
コア数を減らすことなく、
BrokenPipeError: [Errno 32] Broken pipe
を出さずに学習を実行したい。Note
長文の質問失礼しました。Pytorch初学者なので分からないことも多く、どんなアドバイスも歓迎します。どうぞよろしくお願い致します。