首页 > 解决方案 > model.train_on_batch() 实际上在做什么?

问题描述

我正在使用以下命令在 Python 中训练 MobileNetV2 网络:

    newmodel = tf.keras.applications.MobileNetV2(
    input_shape=(224,224,3),
    alpha=1.0,
    include_top=True,
    weights="imagenet",
    input_tensor=None,
    pooling=None,
    classes=1000,
    classifier_activation="softmax",)

    newmodel.compile(loss='sparse_categorical_crossentropy',
                      optimizer=tf.keras.optimizers.RMSprop(
                                learning_rate=0.045, rho=0.9,
                                momentum=0.9, epsilon=1e-07,
                                centered=False, name='RMSprop'),
                      metrics=['accuracy'])
    newmodel.train_on_batch(x=processed_image, y=y_true, sample_weight=None, class_weight=None)

processed_image之前声明的位置是一个 1x224x224x3 numpy 数组。

我使用预先训练的权重作为基础,这样我就不必随机化系统中的每个权重。我感兴趣的是对权重和偏差所做的更改,因为我想在自己的实现中复制它。具体来说,目前,我只对最终的全连接层感兴趣。

但是在这个例子中,这些变化实际上是如何计算的呢?为了回答这个问题,涉及到很多微积分,我试图得到最终的方程,但分析这些方程可能更适合数学堆栈交换或其他网站。

相反,我想问是否有任何方法可以从 Python访问源代码以确切知道它在做什么,以便我可以从中提取一个方程。


作为附录,如果这里有人精通反向传播背后的微积分并想看看我得到了什么方程,这里是网络全连接部分的最终方程,它只有两层,一层有 1280 个神经元,后面是一个有 1000 个神经元。我们必须考虑交叉熵损失、softmax、学习率(有衰减)和 RMSProp(我还包括标准的权重衰减):

在此处输入图像描述

在哪里:

即使告诉我他们明显有问题也已经是一个很大的帮助。

标签: pythontensorflowkerasbackpropagation

解决方案


推荐阅读