在Keras嵌入图层

时间:2017-04-05 10:50:30

标签: tensorflow keras

以下是问题的简化版本。

示例数据:

X = np.round(np.random.rand(10, 10) * 10).astype(np.int32)
y = np.round(np.random.rand(10)).astype(np.int32)

型号:

i = Input(shape=(10,), name='sentence_input', dtype='int32')
x = Embedding(1000, 10, mask_zero=True)(i)
o = LSTM(10)(x)
enc_model = Model(i, o)

i2 = Input(shape=(10,), dtype='int32')
x2 = enc_model(i2)
o2 = Dense(1, activation='sigmoid')(x2)

model = Model(i2, o2)
model.compile(optimizer='rmsprop', loss='binary_crossentropy')
model.fit(X, y, epochs=1)

我使用Tensorflow 1.0.1作为Keras后端。 Keras版本2.0。

我想添加屏蔽,但添加了mask_zero=True时,它会失败并显示错误:

InvalidArgumentError: You must feed a value for placeholder tensor 'sentence_input_10' with dtype int32
[[Node: sentence_input_10 = Placeholder[dtype=DT_INT32, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

我虽然在dtype='int32'层上添加Input也可以解决问题。

我需要将enc_model作为单独的Model

1 个答案:

答案 0 :(得分:0)

我认为你的input_dim为1000太大了,不要只有10个值作为输入吗?
所以它应该是12(因为你使用mask_zero = True)。

  

mask_zero:输入值0是否为特殊"填充"应掩盖的价值。当使用可能需要可变长度输入的循环层时,这很有用。如果这是True,则模型中的所有后续层都需要支持屏蔽,否则将引发异常。如果mask_zero设置为True,那么索引0就不能用在词汇表中(input_dim应该等于|词汇| + 2)。