深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

每天給小編五分鐘,小編用自己的代碼,帶你輕鬆學習人工智能!本文將會帶你做完兩個深度學習練手項目,讓你快速熟練掌握深度學習框架pytorch!野蠻智能,小白也能看懂的人工智能。

深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

如果你還沒有搭建好自己的深度學習框架,請參考小編的 ,用這份快速搭建的寶典完成框架搭建。下面進入實戰!

挑戰pytorch五大虎將

乾貨快遞點:

三秒鐘理解“張量”:pytorch中的數據表達形式是張量(Tensor),TensorFLow中也有這個概念就是Tensor,之所以用Tensor,是因為它的表現能力強大,不論多麼複雜的數據都能通過它表示出來。本質上來說,張量就是座標超過兩維的數組。例如,股票的漲跌有一百個影響因素,那一組股票數據就有一百個維度,那這樣的多組數據就是一個張量。

pytorch中有以下類型的張量:

32位浮點型定義方法為:torch.FloatTensor()

64位浮點型定義方法為:torch.DoubleTensor()

16位整形定義方法為:torch.IntTensor()

32位整形定義方法為:torch.ShortTensor()

64位整形定義方法為:torch.LongTensor()

“()”內是你要定義的數據。下面進入代碼實戰。

代碼配送站:

深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

這裡小編定義了FloatTensor類型的張量,在“()”內存儲了一個二維數組,然後將他進行輸出。也可以表示更高維的,只需要多加入一個“[]”,每一層中括號,就表示多一個維度。代碼如下:

深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

注意,這裡的"()"是沒有含義的,“()”裡的“[]”才是表示數,一層中括號表示向量,兩層匯中括號表示矩陣,三層和更多的中括號表示更高維度的數組。大家可以自己再練習著把五種類型的張量都定義一邊並進行輸出。

征戰pytorch變量求導

乾貨快遞點:

深度學習本質上是一個優化系統,想要優化就要找到最低(高)點,就必須要對參數進行求導。pytorch的優點之一就是張量的自動求導功能,一個張量如果變成一個變量,就可以在計算圖中讓這個變量自動求導,我們只需要取出這個導數對它進行優化即可。把一個張量變為一個變量的方法就是Variable(這個tensor),把一個張量傳入這個函數就會被變成變量了,就可以自動求導了。

代碼配送站:

深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

不過這裡需要注意四點:

  1. 在使用Variable之前需要先導入這個函數,這個函數在torch.autograd模塊裡。
  2. 在進行Variable操作時,需要指定是否需要求導,grad是求導的意思。這裡我們傳入True。
  3. backward內需要傳入參數,第一個數會與數組的第一行相乘,第二個數乘以第二行,以此類推。
  4. 如果想要令導數直接是原導數,只需要在backward參數內只輸入一個1即可。如圖:
深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

一組代碼,讓你的數據集被完美處理

乾貨快遞點:

如果說計算機語言分為面向對象和麵向過程。那深度學習一定是面向數據,深度學習歸根結底是從數據中找到規律,所以需要對數據進行操作。那麼就需要你能夠熟練處理你的數據集。關於數據集的模塊,在torch.utils.data中有一個類是Dataset。重寫這個類,就可以定義我們自己的數據類,進而用我們的數據類處理我們的數據。

代碼配送站:

深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

這組代碼略微複雜一些,這裡進行詳細的講解:

  1. 導入Dataset類,這個類在torch.utils.data內。使用from......import......導入。
  2. 重寫Dataset類,就需要命名一個新的類,並把原來的Dataset類傳入括號內,聲明繼承關係。
  3. 重寫Dataset類,就必須要重寫len()和getitem()函數,這個函數我們設置的是可以讀取txt文本。所以都是對txt文本的操作。
  4. 最後在主函數中進行測試,把數據集和路徑傳入我們的類中,新建對象,然後進行輸出,就可以看到數據集中的結果。
  5. 這裡的數據集是小編自己寫的,是為了演示方便而寫的,如果大家想跑這段代碼,可以自己隨便寫一個文本。

pytorch中的神經網絡

乾貨快遞點:

pytorch中有一個模組,叫做nn.Module(),其中nn指的是neaural network,沒錯就是神經網絡的意思。凡是跟神經網絡有關的函數都在這裡,神經網絡的威力強大,相信大家都有所耳聞,尤其是深度神經網絡(深度學習)。如果不瞭解,在小編別的文章裡有詳細的講解。下面我們通過這個模塊來實現一個簡單的神經網絡。

代碼配送站:

由於直接建立一個完整的神經網絡略為複雜,代碼量比較大一些。我會在下篇文章裡專門進行分析,併為大家能構建一個神經網絡。這裡只簡單的講解神經網絡最核心的部分,大家可以先練習。

深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

  1. 這段代碼跟上一段代碼一樣,重寫了nn.Module這個類。nn_net是類名。
  2. super是進行初始化的,聲明這裡是重寫父類方法,而不是覆蓋父類方法。因為我們還要使用父類的方法,所以這裡不進行覆蓋。
  3. 這裡的第5行代碼通過self.Conv2d實現了一個二維的卷積層。
  4. 最後幾行定義了一個前向傳播函數。
深度學習快速進階:十分鐘帶你做完四大練手項目(附完整代碼)

本文先到這裡,下一篇文章繼續帶大家向深度學習前進!野蠻智能,小白也能看懂的人工智能!有什麼問題可以在評論區留言!小編看到就會回。


分享到:


相關文章: