【问题标题】:How to check if lambda layer is captured by Keras in Tensorflow如何检查 lambda 层是否被 Tensorflow 中的 Keras 捕获
【发布时间】: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) 返回 y

def 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


【解决方案1】:

我不确定您现在是否已经解决了您的问题,但可能是 Lambda 层不是最适合 Transformer 的层类型。根据文档:

对于简单的无状态自定义操作,您最好使用layers.core.Lambda 层。但是对于任何具有可训练权重的自定义操作,您应该实现自己的层。

因此,您最好编写自己的 Keras 层。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2021-09-11
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多