[英]The input to the CNN of Conv1D
我在機器學習領域工作。
對於更強大的網絡,我將采用有關 Conv1D 的技術。
輸入數據是一維列表數據,所以我認為 Conv1D 是最佳選擇。
如果輸入大小是(1, 740)
會發生什么? 輸入通道為1可以嗎?
我的意思是,我感覺(1, 740)
張量的 conv1D output 應該與簡單的線性網絡相同。
當然,我還將包括其他 conv1d 層,如下所示。
self.conv1 = torch.nn.Conv1d(in_channels=1, out_channels=64, kernel_size=5)
self.conv2 = torch.nn.Conv1d(in_channels=64,out_channels=64, kernel_size=5)
self.conv3 = torch.nn.Conv1d(in_channels=64, out_channels=64, kernel_size=5)
self.conv4 = torch.nn.Conv1d(in_channels=64, out_channels=64, kernel_size=5)
當輸入通道為 1 時有意義嗎?
提前致謝。 :)
我認為這很好。 注意Conv1D的輸入應該是(B, N, M),其中B是batch size,N是通道數(例如RGB是3),M是特征數。 out_channels 是指要使用的 5x5 過濾器的數量。 看下面代碼的 output 形狀:
k = nn.Conv1d(1,64,kernel_size=5)
input = torch.randn(1, 1, 740)
print(k(input).shape) # -> torch.Size([1, 64, 736])
736 是不使用填充的結果,不保留尺寸。
nn.Conv1d層采用形狀(b, c, w)
的輸入(其中b
是批量大小, c
是通道數, w
是輸入寬度)。 它的 kernel 尺寸是一維的。 它在輸入維度上執行卷積操作(除了批處理和通道軸)。 這意味着 kernel 將對整個輸入(無論是 1D、2D 還是 3D)應用相同的操作。 就像一個“滑動窗口”。 因此,它只有kernel_size
參數。 這是卷積層的主要特征。
Conv1d 允許提取輸入上的特征,而不管它在輸入數據中的位置:在w
-width 輸入的開頭或結尾。 如果您的輸入是時間的(隨時間變化的輸入序列)或空間數據(圖像),這將是有意義的。
另一方面, nn.Linear
將一維張量作為輸入並返回另一個一維張量。 您可以將w
視為神經元的數量。 你最終會得到w*output_dim
參數。 如果您的輸入包含彼此獨立的組件(例如 One/Multi-Hot-Encoding),則最好使用完全連接的層作為nn.Linear
實現。
這兩個行為不同。 當使用nn.Linear
時——在你應該使用nn.Conv1d
的場景中——如果這有意義的話,你的訓練理想地會導致具有相同權重的神經元......但你可能不會。 過去,全密集連接層用於計算機視覺的深度學習。 今天使用卷積是因為有更有效且更適合這些類型的任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.