pytorch处理多维输入的问题
1.多維輸入
之前我們的輸入都是只有一個維度,如果有多個維度呢?
對于每一行叫做一個sample(樣本)
對于每一列叫做一個feature(特征)
數據集各種各樣的什么都有。
csv可以使用excel打開,只能打開逗號做分割的數據集,空格和tab都是不行的。所以可以用記事本打開看一下子。
原來的處理函數發生了相應的變化,從一維的變化成了多維
這個過程拆解來看其實是這樣子的:為了保證其標量性做了一次轉置:
這里我們有一次簡寫:算出來的這個標量整體寫成z
pytorch中的所有繼承自torch.nn.module的這些函數都是向量化函數,在執行的時候函數將自動的應用在向量的每個元素當中,如下圖所示:
我們使用z來表示全部內容就是這樣子的,同時因為自動的向量化我們可以寫成后面的形式。然后我們仔細想一下這個事情,把這個再展開,看看抽象里面到底是什么內容:
但是上面的式子,只是我們理解計算做的事情相當于在做什么,看起來好像是使用一個for循環來操作就行了,但是torch真正在做什么呢?其實整體都擴展為向量和矩陣計算的。
2.多層神經網絡的問題
之前我們講的是羅杰斯特回歸的情況是,都是一層的,那多層的又是怎樣的一種情況呢?
什么是矩陣呢?矩陣其實可以理解成一個空間變換方程,就是從一個維度的方程變化成另外一種維度的方程。從一個維度的空間的一個向量直接對應成為另外一個維度空間的一個向量,所以可以看成是一種空間變換的函數。
我們其實是用多層的線性函數模擬一種非線性的函數,讓訓練的模型更加接近實際情況。為什么可以擬合一個非線性呢?主要是是siogmal函數來引入了非線性的變換。其實我們只要在維度降低的過程時候多拆分幾次就可以了。
當然我們也可以先往高維度變換,再向低維度來進行變化。這種維度變得更多,其實是超參數的變換。這樣可以增加學習能力,但是學習能力太強也不行,會產生噪聲的問題。
2.1泛化能力
我們已學習來舉例子。并不用死扣書本,因為偏技術應用性的內容可能過幾年就發生了變化。要有讀文檔(主要是應對版本更新的問題)、計算機各種科目的基本架構都了解掌握的能力。這樣其實就是泛化能力比較強。所以這樣我們就更加能夠理解學習器學習能力太強的情況了。學習能力太強其實就是在背書本了。
3.代碼實現
3.1正常實現
這里面其實我們只是更改了模型這里的內容
class MyModule(torch.nn.Module):def __init__(self):super(MyModule,self).__init__()self.linear9_8=torch.nn.Linear(9,8)self.linear8_6=torch.nn.Linear(8,6)self.linear6_2=torch.nn.Linear(6,2)self.linear2_1=torch.nn.Linear(2,1)self.sigmoid=torch.nn.Sigmoid()#這里我們注意我們是讓sigmoid單獨成為了一個層,和之前的在functional當中調用的那個是不一樣的def forward(self,x):x=self.sigmoid(self.linear9_8(x))x=self.sigmoid(self.linear8_6(x))x=self.sigmoid(self.linear6_2(x))x=self.sigmoid(self.linear2_1(x))#我們注意這里的是最好反復使用同一個x,不要寫x1x2這種,因為那樣子的話容易出錯。3.2激活函數的快速修改
我們可以將激活函數也提前定義出來這樣就可以一下子更改所有了
于此同時我們要注意我們是一個分類還是一個回歸分析,如果是一個分布我們一定要注意最終一定要是一個sigomid()
總結
以上是生活随笔為你收集整理的pytorch处理多维输入的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 罗杰斯蒂回归
- 下一篇: pytorch的多分类问题