簡體   English   中英

Conv1D 的 CNN 的輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM