我有一个带有模型的类:
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
我使用以下内容构建模型:
network = MyNetwork()
model = network.build()
使用以下几行进行训练时:
model.compile(tf.train.RMSPropOptimizer(0.001), loss=tf.losses.sigmoid_cross_entropy, metrics=['accuracy']
model.fit(X, y, epochs=10)
模型训练没有问题。
但是在单独运行中,使用以下代码:
for i in range(10):
print("Epoch ", (i))
loss, pred = D.train_step(X, y)
print(loss)
几个时期后,损失就停滞了。计算出的精度也将保持在0.5。
有人知道如何使用GradientTape
训练Keras模型吗?