# Manual training loop with gradient access optimizer = keras.optimizers.SGD(learning_rate=0.1) for epoch in range(10): with tf.GradientTape() as tape: # Forward pass predictions = model(X, training=True) loss = keras.losses.binary_crossentropy(y_tensor, predictions) loss = tf.reduce_mean(loss) # Average across batch # Compute gradients gradients = tape.gradient(loss, model.trainable_variables) # Apply gradients optimizer.apply_gradients(zip(gradients, model.trainable_variables)) if epoch % 2 == 0: print(f"Epoch {epoch}, Loss: {loss.numpy():.4f}") __ __