以下是问题的简化版本。
示例数据:
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
答案 0 :(得分:0)
我认为你的input_dim为1000太大了,不要只有10个值作为输入吗?
所以它应该是12(因为你使用mask_zero = True)。
mask_zero:输入值0是否为特殊"填充"应掩盖的价值。当使用可能需要可变长度输入的循环层时,这很有用。如果这是True,则模型中的所有后续层都需要支持屏蔽,否则将引发异常。如果mask_zero设置为True,那么索引0就不能用在词汇表中(input_dim应该等于|词汇| + 2)。