繁体   English   中英

在 tensorflow 2 中使用回调信息训练神经网络

[英]Use callback information for training neural network in tensorflow 2

我目前正在尝试扩展此问题中建议的代码: How to get layer weight while training?

通过使用下面的代码:

class CustomCallback(keras.callbacks.Callback):        
    def on_train_batch_begin(self, batch, logs=None):
        print(model.layers[2].get_weights())

history = model.fit(train_x, train_y, 
                    epochs=200,
                    validation_data=(test_x, test_y), 
                    verbose=1, 
                    callbacks=[CustomCallback()])

我可以在训练时获得神经网络特定层的权重(在每批梯度下降的每次迭代开始时)。

我的问题是,我可以使用这些信息并允许损失函数访问它吗? 我想使用此信息来定义要优化的新表达式,作为要使用的自定义损失 function 的一部分。

换句话说,我想访问在每个批次的每个训练步骤期间通过回调获得的信息,并将此信息提供给自定义损失 function 以定义要优化的目标 function 术语之一。

例如,考虑以下自定义损失:

def Custom_Loss(y_true, y_pred):
    return f(y_true, y_pred)

我想将上述定义的损失修改如下:

def Custom_Loss(y_true, y_pred):
    return f(y_true, y_pred) + g(layer_2_weight, y_pred)

我想出的一个非常菜鸟的技巧(但不知道该怎么做)是定义一个“虚拟”变量,该变量在回调内部重新定义并将其用于丢失 function 定义,但我不确定这是否可行或如果这是正确的做法。

如果上述任务是可以实现的,是否可以获得一些示例代码或stackoverflow中的任何帖子(我试图找到它,但我找不到任何东西。如果有的话,请告诉我)?

就个人而言,我会做下面列出的两件事之一,

  • Use Eager Execution ~ While TensorFlow by default now uses this, you would need to, instead of using a Callback and running model.fit() , run the model itself as a function. 您可以在官方 TensorFlow 网站上获得有关 Eager Execution 的更好信息
  • Use PyTorch ~ I know this question pertains to TensorFlow, but if using PyTorch is an option for you, then such a model training would become simpler in PyTorch.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM