2017-02-08 24 views
5

Tôi muốn tạo một mạng nơron sâu trong keras, trong đó mỗi phần tử của lớp đầu vào được "mã hóa" bằng cách sử dụng cùng một tính năng Chia sẻ Nhúng() lớp, trước khi nó được đưa vào các lớp sâu hơn.Keras - Cách tạo Lớp Nhúng() Chia sẻ cho mỗi Đầu vào-Neuron

Mỗi đầu vào sẽ là số xác định loại đối tượng và mạng nên tìm hiểu cách nhúng một gói biểu diễn nội bộ của "đối tượng này là gì". Vì vậy, nếu lớp đầu vào có kích thước X, và nhúng có kích thước Y, lớp ẩn đầu tiên sẽ bao gồm các tế bào thần kinh X * Y (mỗi nơron đầu vào được nhúng).

Here is a little image that should show the network architecture that I would like to create, where each input-element is encoded using a 3D-Embedding

Tôi làm cách nào để thực hiện việc này?

+0

Bạn có muốn giữ biểu diễn ẩn dưới dạng nhiều kết quả đầu ra hoặc bạn có muốn chúng tạo một vectơ đơn không? –

+0

Nó phải là nhiều kết quả đầu ra riêng biệt trong lớp ẩn đầu tiên, một cho mỗi đầu vào. Xin hãy xem bình luận thứ hai của tôi bên dưới câu trả lời của Nassim Ben. Cảm ơn nhiều! :-) –

Trả lời

5
from keras.layers import Input, Embedding 

first_input = Input(shape = (your_shape_tuple)) 
second_input = Input(shape = (your_shape_tuple)) 
... 

embedding_layer = Embedding(embedding_size) 

first_input_encoded = embedding_layer(first_input) 
second_input_encoded = embedding_layer(second_input) 
... 

Rest of the model.... 

Emnedding_layer sẽ có trọng số chia sẻ. Bạn có thể làm điều này dưới dạng danh sách các lớp nếu bạn có nhiều đầu vào.

Nếu những gì bạn muốn được chuyển đổi một tensor đầu vào, cách để làm điều đó là:

from keras.layers import Input, Embedding 

# If your inputs are all fed in one numpy array : 
input_layer = Input(shape = (num_input_indices,)) 

# the output of this layer will be a 2D tensor of shape (num_input_indices, embedding_size) 
embedded_input = Embedding(embedding_size)(input_layer) 

Đây có phải là những gì bạn đang tìm kiếm?

+0

Cảm ơn bạn rất nhiều. Không thể kiểm tra ngay bây giờ, có một số vấn đề về phần cứng: \ Cái đầu tiên trông giống như những gì tôi muốn. Tough, tôi vẫn có thể ăn nó một tensor đầu vào theo cách đó? Vì vậy, Keras xử lý các đầu vào như một lớp (= tôi ăn 1 Vector), và không phải là một đầu vào dozend cá nhân. Thứ hai, có chính xác là nó sẽ nhúng băng tải WHOLE là "một đối tượng" hay nó nhúng mọi phần tử của vectơ đầu vào theo cách riêng của nó? –

+0

Mô tả chi tiết hơn về việc sử dụng những gì bạn muốn. Viết một ví dụ với các yếu tố đầu vào mà bạn muốn cho ăn, hình dạng của chúng, và cũng là những gì đầu ra (và hình dạng của nó) bạn muốn? –

+0

Cảm ơn rất nhiều! Tôi muốn thực hiện thuật toán học tập tăng cường đơn giản. Nhưng thay vì để CNN thực hiện tính năng tách đối tượng // phát hiện đối tượng, tôi muốn cho thuật toán biết đối tượng nào hiển thị trên vị trí nào trên màn hình. Vì vậy, như thế này http://imgur.com/a/ouidO (lý do kỹ năng Sơn). Nhưng tôi muốn đào tạo một đại diện nội bộ - hoặc nhúng - mà chụp như "những gì mỗi đối tượng .. là". Vì vậy, mạng nên tìm hiểu một đại diện bên trong, chia sẻ của các ID đối tượng này –

Các vấn đề liên quan