使用GradientTap时,Keras模型不训练

2024-04-26 04:00:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堂课里面有一个模型:

class MyNetwork:

    def __init__(self):
        # layer initializations
        self.optimizer = tf.train.RMSPropOptimizer(0.001)
        self.loss = tf.losses.sigmoid_cross_entropy

    def build(self):
        # layer connections

        self.model = keras.Model(inputs=[inputs], outputs=[outputs]
        return self.model

    @tf.function
    def train_step(self, images, labels):
        with tf.GradientTape() as tape:
            predictions = self.model(images)
            loss = self.loss(labels, predictions)

        gradients = tape.gradient(loss, self.model.trainable_variables)
        self.optimizer.apply_gradients(zip(gradients, self.model.trainable_variables))
        return loss, predictions

我使用以下方法构建模型:

^{pr2}$

当使用以下行进行培训时:

^{3}$

模型列车没有任何问题。在

但在单独的运行中,使用以下代码:

for i in range(10):
    print("Epoch ", (i))

    loss, pred = D.train_step(X, y)
    print(loss)

损失在几个时期之后就卡住了。计算精度也停止在0.5。在

有人知道如何使用GradientTape训练Keras模型吗?在


Tags: 模型selflayermodelreturntfdefstep