Học tập đa tác vụ trong Keras


12

Tôi đang cố gắng thực hiện các lớp được chia sẻ trong Keras. Tôi thấy rằng Keras có keras.layers.concatenate, nhưng tôi không chắc chắn từ tài liệu về việc sử dụng nó. Tôi có thể sử dụng nó để tạo nhiều lớp chia sẻ không? Điều gì sẽ là cách tốt nhất để thực hiện một mạng lưới thần kinh được chia sẻ đơn giản như được hiển thị dưới đây bằng cách sử dụng Keras?Mạng lưới thần kinh được chia sẻ

Lưu ý rằng tất cả hình dạng của các lớp đầu vào, đầu ra và chia sẻ cho cả 3 NN đều giống nhau. Có nhiều lớp chia sẻ (và các lớp không chia sẻ) trong ba NN. Các lớp màu là duy nhất cho mỗi NN, và có hình dạng giống nhau.

Về cơ bản, hình vẽ biểu thị 3 NN giống hệt nhau với nhiều lớp ẩn được chia sẻ, theo sau là nhiều lớp ẩn không chia sẻ.

Tôi không chắc cách chia sẻ nhiều lớp như trong ví dụ Twitter, chỉ có một lớp được chia sẻ (ví dụ trong tài liệu API).

Câu trả lời:


10

Input xDenseDense

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

Chúng ta có thể định nghĩa mô hình của mình bây giờ như thế này:

model = Model(inputs=x, outputs=[out1, out2, out3])

Bây giờ nó sẽ mong đợi một bộ / danh sách gồm ba phần tử, một phần tử cho mỗi đầu ra.

Bạn có thể đi xa hơn với những khái niệm này. Giả sử chúng ta muốn tìm hiểu các trọng số riêng cho các lớp người nhưng vẫn muốn có cùng các trọng số cho tổ hợp tuyến tính đối với lớp đầu ra, chúng ta có thể đạt được điều đó bằng cách thực hiện điều này:

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

EDIT: Ghép nối về cơ bản là trái ngược với những gì bạn muốn làm, đó là dán các đầu ra (trung gian) của các phần khác nhau trong mạng của bạn vào một lớp mới. Bạn thực sự muốn tách ra thành nhiều phần khác nhau.


Cảm ơn rất nhiều. Khi chúng ta làm một model.fit([data1, data2], [labels1, labels2]), điều này sẽ được đào tạo (lan truyền ngược) như một mô hình duy nhất, phải không?
Aditya

1
Vâng, đó chỉ là một điều, nếu các nhãn có các tổn thất khác nhau liên quan, bạn sẽ cần thực hiện thêm một số công việc, nó không phải là siêu dễ dàng trong Keras nhưng không phải là không thể, nếu chúng chia sẻ cùng chức năng mất mà không cần xem lại thì nó chỉ hoạt động được.
Jan van der Vegt

Điều này sẽ yêu cầu đào tạo lại mô hình thống nhất. Điều gì nếu bạn đã có trọng lượng đào tạo cho các mô hình phụ? Có cách nào để sử dụng các trọng số đó để tạo ra các wieghts cho mô hình hợp nhất không?
shahar_m

@shahar_m xin lỗi tôi không chắc trường hợp sử dụng là gì. nếu trọng lượng đào tạo của mô hình hợp nhất là cố định, bạn có thể tải và đóng băng các lớp đó.
Aditya
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.