婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 解決pytorch trainloader遇到的多進程問題

解決pytorch trainloader遇到的多進程問題

熱門標簽:天津電話機器人公司 開封語音外呼系統代理商 應電話機器人打電話違法嗎 地圖標注線上如何操作 手機網頁嵌入地圖標注位置 400電話辦理哪種 河北防封卡電銷卡 開封自動外呼系統怎么收費 電銷機器人的風險

pytorch中嘗試用多進程加載訓練數據集,源碼如下:

trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=3)

結果報錯:

RuntimeError: 
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

從報錯信息可以看到,當前進程在運行可執行代碼時,產生了一個新進程。這可能意味著您沒有使用fork來啟動子進程或者是未在主模塊中正確使用。

后來經過查閱發現了原因,因為windows系統下默認用spawn方法部署多線程,如果代碼沒有受到__main__模塊的保護,新進程都認為是要再次運行的代碼,將嘗試再次執行與父進程相同的代碼,生成另一個進程,依此類推,直到程序崩潰。

解決方法很簡單

把調用多進程的代碼放到__main__模塊下即可。

if __name__ == '__main__':
    transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=3)

補充:pytorch-Dataloader多進程使用出錯

使用Dataloader進行多進程數據導入訓練時,會因為多進程的問題而出錯

dataloader = DataLoader(transformed_dataset, batch_size=4,shuffle=True, num_workers=4)

其中參數num_works=表示載入數據時使用的進程數,此時如果參數的值不為0而使用多進程時會出現報錯

RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module: if __name__ == '__main__': freeze_support() ... The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.

此時在數據的調用之前加上if __name__ == '__main__':即可解決問題

if __name__ == '__main__':#這個地方可以解決多線程的問題

        for i_batch, sample_batched in enumerate(dataloader):

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • pytorch多進程加速及代碼優化方法
  • PyTorch 解決Dataset和Dataloader遇到的問題
  • 解決pytorch DataLoader num_workers出現的問題

標簽:江蘇 六盤水 宿遷 駐馬店 成都 常州 山東 蘭州

巨人網絡通訊聲明:本文標題《解決pytorch trainloader遇到的多進程問題》,本文關鍵詞  解決,pytorch,trainloader,遇到,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解決pytorch trainloader遇到的多進程問題》相關的同類信息!
  • 本頁收集關于解決pytorch trainloader遇到的多進程問題的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 镇康县| 兴仁县| 安康市| 高邑县| 盘山县| 北海市| 佛教| 阿合奇县| 应城市| 大冶市| 株洲市| 沿河| 黄冈市| 红河县| 梧州市| 克拉玛依市| 三亚市| 竹北市| 吉水县| 玉林市| 渭南市| 玛纳斯县| 浦东新区| 玉溪市| 瑞安市| 定襄县| 浮山县| 天门市| 大连市| 丰原市| 福州市| 黄平县| 尚义县| 寻甸| 阳泉市| 泰宁县| 襄樊市| 陈巴尔虎旗| 玉龙| 宜良县| 民县|