學習Pytorch遇到的一些問題(一)

基本介紹

這周開始學習深度學習的部分知識,參考的書是《動手學深度學習》(PyTorch版),在操作過程中遇到一些小問題,記錄一下問題和解決辦法。

PyTorch下載過慢

安裝步驟

PyTorch的安裝步驟相對簡單,首先打開它的官網,找到下圖所示的內容。第一行是選擇版本,第二行是選擇要在什麼系統上安裝,第三行如果是用Anaconda的話選Conda就可以,第四行是選擇開發語言,第五行是選擇CUDA的版本,這些都選好之後,會在第六行出現程式碼,這行程式碼就是用來安裝的。複製這行程式碼,打開Anaconda的命令行,粘貼,回車就可以了。

安裝過慢

在安裝過程中,我發現下載十分緩慢,查找了一下資料發現是下載源的問題。解決方法如下。

  1. 添加清華鏡像源。

    conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --set show_channel_urls yes
    conda config --add channels //mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
    
  2. 刪掉下載程式碼中的-c pytorch,因為這個是指定從官網下載。只添加清華源,不刪除的話這兩個指令的話仍然會從官網下載。即,需要執行下面的程式碼、

    conda install pytorch torchvision cudatoolkit=10.2
    

安裝了CUDA但是無法使用GPU計算

CUDA(Compute Unified Device Architecture),是顯示卡廠商NVIDIA推出的運算平台。 CUDA™是一種由NVIDIA推出的通用並行計算架構,該架構使GPU能夠解決複雜的計算問題。 我在PyTorch官網進行選擇下載的時候選擇的時候選擇了CUDA 10.2,可是安裝之後仍然無法使用GPU進行計算。

  1. 檢查時候可以使用GPU進行計算。可以在Jupyter里(或者新建一個py文件)運行下面兩行程式碼,看一下輸出。

    import torch
    print(torch.cuda.is_available())
    

    如果輸出True,那麼沒任何問題;如果是False,可能是顯示卡的驅動需要更新一下。

  2. Windows系統,直接去NVIDIA官網下載適合自己的顯示卡驅動,然後一路Next安裝就可以了。如果是Manjaro(Linux)系統,請參考我的另一篇部落格

缺少d2lzh_pytorch庫和FashionMNIST數據集下載錯誤

缺少d2lzh_pytorch庫

d2lzh_pytorch這個庫好像是本書的作者自建的,裡面包含一些書本常式的函數。可以去這本書的github主頁把整個項目下載下來,在code文件夾里有這個庫。如果網速過慢,可以從下面這個鏈接下載。百度網盤:

鏈接://pan.baidu.com/s/1fcJrUishw6o2WdzGWTMP6w
提取碼:qdug

下載之後,將它放在Anaconda安裝目錄的Lib文件夾里就可以了。

繼續運行可能會出現缺少torchtext這個庫。可以在Anaconda的命令行里執行以下命令。

pip install torchtext

FashionMNIST數據集下載錯誤

用到的FashionMNIST數據集有四個,前三個沒有問題,在導入第四個的時候,出現了大意為「連接XXX時出現了連接錯誤」之類的錯誤,不清楚原因。解決步驟如下:

  1. 這個網站下載對應的數據集。打開該網頁往下翻,在Get the Data部分有四個數據集及基本基本情況介紹,點擊Download即可。

  2. 將下載下來的數據集放到對應文件夾下。有兩種方式可以查看應放的位置。

    • 根據之前導入的錯誤資訊確定位置。錯誤資訊中會出現「將A文件從B網站下載到C位置的時候XXX」。

    • 根據導入數據集時使用的命令確定。比如,使用以下程式碼導入,則目標位置是「User」目錄下的Datasets文件夾中的FashionMNIST文件夾。

      mnist_train = torchvision.datasets.FashionMNIST(root='~/Datasets/FashionMNIST', train=True, download=True, transform=transforms.ToTensor())