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