是否可以在keras损失函数中直接访问中间层?

时间:2019-05-31 01:49:37

标签: python tensorflow keras loss-function

我很好奇损失函数是否可以在keras中实现中间层输出,而无需设计模型来将中间层作为输出提供。我已经看到一种解决方案,除了最终预测之外,还可以重新设计体系结构以返回中间层,并将其用作解决方法,但是我不清楚是否可以直接从损失函数访问层输出

1 个答案:

答案 0 :(得分:0)

  

我不清楚是否可以直接从损失函数访问图层输出

当然可以。

通过示例,使用功能性API考虑此模型:

estimator = tf.estimator.Estimator(...)
params = estimator.get_variable_names()
for p in params:
    print(p, estimator.get_variable_value(p).shape)

例如,如果我们想引入一个新的损失函数,该函数也对inp = keras.layers.Input(shape=(28, 28)) flat = keras.layers.Flatten()(inp) dense = keras.layers.Dense(128, activation=tf.nn.relu)(flat) out = keras.layers.Dense(10, activation=tf.nn.softmax)(dense) model = keras.models.Model(inputs=inp, outputs=out ) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) 层的输出的最大权重进行了惩罚,那么我们可以编写类似以下内容的自定义损失函数:

dense

只需将新的损失函数传递给def my_funky_loss_fn(y_true, y_pred): return (keras.losses.sparse_categorical_crossentropy(y_true, y_pred) + keras.backend.max(dense)) 方法即可在模型中使用:

compile()