2017-02-08 5 views
5

kerasで深層ニューラルネットワークを作成したい場合、入力レイヤーの各要素は同じ共有Embedding() - より深い層に供給される前に、層を形成する。Keras - 入力ニューロンごとに共有埋め込み()レイヤーを作成する方法

各入力はオブジェクトのタイプを定義する数字であり、ネットワークは「このオブジェクトが何であるか」の内部表現をカプセル化する埋め込みを学習する必要があります。

入力層がX次元であり、埋め込みにY次元がある場合、最初の隠れ層はX * Yニューロン(各入力ニューロンが埋め込まれている)で構成されている必要があります。

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

私はこれをどのように行うことができますか?

+0

隠れた表現を複数の出力の形で保存したいのですか、それとも1つの特徴ベクトルを作成しますか? –

+0

最初の隠れ層では、入力ごとに1つずつ、複数の異なる出力にする必要があります。ナシム・ベンの答えの下で私の2番目のコメントを見てください。どうもありがとうございました! :-) –

答えて

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は共有重みを持ちます。多くの入力がある場合は、レイヤーのリストの形でこれを行うことができます。

何をしたいことは入力のテンソルを変換されている場合は、それを行う方法は次のとおりです。

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) 

は、あなたが探していたものを、このですか?

+0

ありがとうございます。今すぐテストすることはできません。いくつかのハードウェアの問題があります。\ 最初のものは私が望むように見えます。厳しいですが、私はまだそれを入力のテンソルに供給できますか?そのため、KerasはInputを1つのレイヤー(=私は1 Vectorを送ります)として扱い、dozend個の入力として扱わないようにします。 第二に、WHOLEテンソルを「1つのオブジェクト」として埋め込むのは正しいのですか、それとも入力ベクトルのすべての要素をそれ自身と個別に埋め込むのでしょうか? –

+0

あなたが望むものをより詳細に説明してください。あなたが送りたい入力、その形、そしてどのような出力(そしてその形)を望むのかという例を書いてください。 –

+0

ありがとう! 単純な強化学習アルゴリズムを実装したいと考えています。 CNNに特徴抽出//オブジェクト検出をさせるのではなく、どのオブジェクトが画面のどの位置に表示されているかをアルゴリズムに伝えたいと思います。 このように、http://imgur.com/a/ouidO(ペイントスキルについて言い訳) しかし、「各オブジェクトが何であるか」とキャプチャする内部表現(つまり埋め込み)を訓練したいと思います。 したがって、ネットワークはこれらのオブジェクトIDの共有された内部表現を学習する必要があります –

関連する問題