Sự khác biệt giữa Conv1D và Conv2D là gì?


18

Tôi đã xem qua các tài liệu tích chập của máy ảnh và tôi đã tìm thấy hai loại kết hợp Conv1D và Conv2D. Tôi đã thực hiện một số tìm kiếm trên web và đây là những gì tôi hiểu về Conv1D và Conv2D; Conv1D được sử dụng cho các chuỗi và Conv2D sử dụng cho hình ảnh.

Tôi luôn nghĩ rằng các mạng nerual chập chỉ được sử dụng cho hình ảnh và hình dung CNN theo cách này

nhập mô tả hình ảnh ở đây

Một hình ảnh được coi là một ma trận lớn và sau đó một bộ lọc sẽ trượt qua ma trận này và tính toán sản phẩm chấm. Điều này tôi tin rằng những gì keras đề cập đến như một Conv2D. Nếu Conv2D hoạt động theo cách này thì cơ chế của Conv1D là gì và làm thế nào chúng ta có thể tưởng tượng cơ chế của nó?


2
Hãy xem câu trả lời này . Hi vọng điêu nay co ich.
101

Câu trả lời:


4

Convolution là một phép toán trong đó bạn "tóm tắt" một tenxơ hoặc ma trận hoặc một vectơ thành một phép toán nhỏ hơn. Nếu ma trận đầu vào của bạn là một chiều thì bạn tóm tắt dọc theo chiều đó và nếu một thang đo có n kích thước thì bạn có thể tóm tắt dọc theo tất cả n chiều. Conv1D và Conv2D tóm tắt (tích hợp) dọc theo một hoặc hai chiều.

bi=j=m10ai+jwj
i=[1,nm+1]

wi=1/n

[một:một1một2một3w:1/21/2w:1/21/2]= =[b:một1+một22một2+một32]

bTôiktôi= =Σj1= =m1-1j2= =m2-1j3= =m4-10mộtTôi+j1,k+j2,tôi+j3*wj1j2j3
Tôi= =[1,n1-m1+1],k= =[1,n2-m2+1],tôi= =[1,n3-m3+1]


3

Tích chập 1d này là tiết kiệm chi phí, nó hoạt động theo cùng một cách nhưng giả sử mảng 1 chiều tạo ra phép nhân với các phần tử. Nếu bạn muốn hình dung hãy nghĩ về một ma trận của một hàng hoặc cột, tức là một chiều duy nhất khi chúng ta nhân lên, chúng ta sẽ có một mảng có cùng hình dạng nhưng giá trị thấp hơn hoặc cao hơn, do đó nó giúp tối đa hóa hoặc giảm thiểu cường độ của các giá trị.

Hình ảnh này có thể giúp bạn, nhập mô tả hình ảnh ở đây

Để biết chi tiết tham khảo, https://www.youtube.com/watch?v=qVP574skyuM


1

Tôi sẽ sử dụng phối cảnh Pytorch, tuy nhiên, logic vẫn giữ nguyên.

Khi sử dụng Conv1d (), chúng ta phải nhớ rằng rất có thể chúng ta sẽ làm việc với các đầu vào 2 chiều như chuỗi DNA mã hóa nóng hoặc hình ảnh đen trắng.

Sự khác biệt duy nhất giữa Conv2d () và Conv1d () thông thường hơn là cái sau sử dụng kernel 1 chiều như trong hình bên dưới.

Ví dụ Conv1d () được tìm thấy trên /programming/48859378/how-to-give-the-1d-input-to-convolutional-neural-networkcnn-USE-keras/52508449

Ở đây, chiều cao của dữ liệu đầu vào của bạn trở thành chiều sâu của độ sâu (hoặc in_channels) và các hàng của chúng tôi trở thành kích thước hạt nhân. Ví dụ,

import torch
import torch.nn as nn

tensor = torch.randn(1,100,4)
output = nn.Conv1d(in_channels =100,out_channels=1,kernel_size=1,stride=1)(tensor)
#output.shape == [1,1,4]

Chúng ta có thể thấy rằng hạt nhân tự động kéo dài theo chiều cao của hình ảnh (giống như trong Conv2d () độ sâu của hạt nhân sẽ tự động kéo dài các kênh của hình ảnh) và do đó, tất cả những gì chúng ta còn lại là kích thước hạt nhân đối với nhịp của các hàng.

Chúng ta chỉ cần nhớ rằng nếu chúng ta giả sử đầu vào 2 chiều, các bộ lọc của chúng ta trở thành các cột và các hàng của chúng ta trở thành kích thước hạt nhân.


Hình ảnh được lấy từ câu hỏi trước: stackoverflow.com/questions/48859378/
Kẻ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.