【发布时间】:2019-02-04 17:21:46
【问题描述】:
因此,当我在 Keras 中运行如下代码时,模型可以工作:
def 转换器代码(输入层): hparams = transformer.transformer_base() 编码器=transformer.TransformerEncoder(hparams, mode=tf.estimator.ModeKeys.TRAIN) x = keras.backend.expand_dims(inputLayer, axis=2) y = 编码器({“输入”:x,“目标”:0,“target_space_id”:0}) y = keras.backend.squeeze(y[0], 2) 返回 ydef trainModel(args, trainInput, trianOutput, testInput, testOutput, taskName, tags):
inputLayer = keras.layers.Input(shape=(len(trainInput[0]),
len(trainInput[0][0])), dtype='float32')
inputAfterDense = keras.layers.Dense(512, activation='relu')(inputLayer)
crfLayer = CRF(len(tags), sparse_target=True, name='result')
y = keras.layers.Lambda(transformer_code)(inputAfterDense )
modelPred = crfLayer(y)
model = keras.Model(inputs=inputLayer, outputs=modelPred)
model.compile(
optimizer='adam',
loss = {'result': crfLayer.loss_function},
metrics={'result': crfLayer.accuracy}
)
print 'finish model setting'
print model.summary()
但是如果我删除密集层
inputAfterDense = keras.layers.Dense(512, activation='relu')(inputLayer)
训练中断,预测准确率一直几乎为零。
我怀疑 lambda 层没有被 Keras 捕获?如何检查?
【问题讨论】:
-
什么是“捕获”? --- 如果你没有任何可训练参数的层,那就没有什么可学的了。
-
所以我对代码不起作用的假设是 Lambda 层没有正确地将转换器添加到 Keras 层,因此几乎为零的准确性。由于我没有使用 Lambda 的经验,所以想知道上面的实现是否正确。
标签: python tensorflow keras