Mạng nơ-ron nhân tạo (ANN) với số lượng đầu vào và đầu ra tùy ý


10

Tôi muốn sử dụng ANN cho vấn đề của mình, nhưng vấn đề là số nút đầu vào và đầu ra của tôi không được sửa.

Tôi đã thực hiện một số tìm kiếm trên google trước khi đặt câu hỏi và thấy rằng RNN có thể giúp tôi giải quyết vấn đề của mình. Nhưng, tất cả các ví dụ mà tôi tìm thấy bằng cách nào đó đã xác định số lượng nút đầu vào và đầu ra.

Vì vậy, tôi đang tìm kiếm một chiến lược, làm thế nào để biến nó thành sự thật hoặc ít nhất là một số ví dụ, thích hợp hơn trong Keras hoặc PyTorch.

Thêm chi tiết về vấn đề của tôi:

Tôi có hai danh sách đầu vào, trong đó độ dài của danh sách đầu tiên là cố định và bằng hai, fe:

in_1 = [2,2] 

nhưng độ dài của danh sách thứ hai là linh hoạt, độ dài có thể từ ba đến inf, fe:

in_2 = [1,1,2,2]

hoặc là

in_2 = [1,1,1,2,2,2,3,3,3]

Ngoài ra, danh sách đầu vào phụ thuộc lẫn nhau. Danh sách đầu tiên hiển thị kích thước của danh sách đầu ra. Vì vậy, nếu in_1 = [2,2], có nghĩa là đầu ra phải có khả năng được định hình lại thành dạng [2,2].

Hiện tại, tôi đang suy nghĩ để kết hợp hai danh sách đầu vào thành một:

in = in_1 + in_2 = [2, 2, 1, 1, 2, 2]

Hơn nữa, đầu ra có cùng độ dài với danh sách in_2 , fi:

nếu danh sách đầu vào là:

in_1 = [2, 2]
in_2 = [1, 1, 2, 2]

Đầu ra phải là:

out = [1, 2, 1, 2]

Mọi ý tưởng đều được chào đón!

Câu trả lời:


6

Câu trả lời có thể phụ thuộc vào tầm quan trọng của độ dài của vectơ đầu vào hoặc cách nó bắt nguồn.

Tuy nhiên, giải pháp đơn giản nhất thường là biết đầu vào kích thước lớn nhất và sử dụng đó làm số lượng vectơ. Nếu đầu vào đã cho có độ dài nhỏ hơn, bạn có thể thực hiện phần đệm với số không hoặc ký hiệu thích hợp. Vì vậy, thay vì có một vectơ [1, 2, 3] và [1, 2, 2, 3], bạn có thể có các vectơ [1, 2, 3, 0] và [1, 2, 2, 3].

Điều tương tự có thể áp dụng cho đầu ra. Nếu đầu ra dự kiến ​​là [1, 2, 1] và [1, 3, 4, 1], bạn có thể coi đầu ra đầu tiên là [1, 2, 1, 0]

Đây không phải là một hack?

Thông thường, các mạng thần kinh thực hiện chức năng gần đúng. Lý tưởng nhất, nó đại diện cho vectơ (ma trận) là đầu vào và vectơ (ma trận) là đầu ra. Đây là lý do tại sao luôn luôn mong muốn rằng kích thước của vectơ đầu vào của bạn được cố định.


Ok, rõ ràng, tôi có thể làm đệm cho đầu vào. Nhưng, làm thế nào để xác định kích thước của các nút đầu ra?
Lúa

3

Tôi nghĩ rằng bạn có thể đã hiểu nhầm số lượng đầu vào cố định cho RNN. Đây là số lượng đầu vào trên mỗi dấu thời gian . Tất cả các ví dụ của bạn có số lượng đầu vào cố định cho mỗi dấu thời gian: 1! Bạn cung cấp cho họ từng cái một vào mạng thần kinh của bạn, kết thúc bằng mã thông báo "kết thúc" đặc biệt (bạn luôn có thể có đầu vào thứ hai cho việc này). Dạy nó không cung cấp đầu ra cho đến khi nó nhìn thấy mã thông báo kết thúc và sau đó xuất ra các thành phần của kết quả một lần, kết thúc bằng mã thông báo đầu ra đặc biệt.


Ồ cảm ơn nhé! Bạn có biết bất kỳ hướng dẫn / ví dụ phong nha để hiểu nó tốt hơn?
Lúa

1
@Paddy Xem awesome-rnn cho một số liên kết, ví dụ char-rnn khá thú vị.
Arthur Tacca

2

Biết rằng danh sách đầu tiên có khá nhiều bất biến (chỉ mô tả một hình học nhất định), bạn cũng có thể thử tạo nhiều NN khác nhau, chuyên biệt cho mọi cấu hình in_1 khác nhau và chỉ sử dụng in_2 để cung cấp cho mạng.

Vì vậy, in_1 có thể lái các mạng khác nhau.

in_1=[1,1]? --> NN #1 (n1) --> (o1)
in_1=[2,1]? --> NN #2 (n1,n2) --> (o1,o2)
in_1=[2,2]? --> NN #3 (n1,n2,n3,n4) -> (o1,o2,o3,o4)

Trong bước đầu tiên, bạn xác định cấu hình (nghĩa là tạo ra một lệnh) và sau đó huấn luyện / cung cấp các mạng chuyên biệt phù hợp.


thực ra, đó là một ý tưởng tốt, nhưng số lượng hình dạng khá lớn ... dù sao đi nữa, cảm ơn bạn đã đóng góp!
Lúa
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.