我想在keras中创建一个深度神经网络,其中输入层的每个元素在被送入更深层之前使用相同的共享嵌入()层进行“编码”。
每个输入都是一个定义对象类型的数字,网络应该学习一个嵌入,它封装了“这个对象是什么”的内部表示。
因此,如果输入图层具有X维度,并且嵌入具有Y维度,则第一个隐藏图层应由X * Y神经元组成(每个嵌入的输入神经元)。
我该怎么做?
答案 0 :(得分:10)
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)
这是你在找什么?