(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() x_train, x_test = x_train.astype("float32") / 255.0, x_test.astype("float32") / 255.0 x_train = x_train.reshape(-1, 784) x_test = x_test.reshape(-1, 784) epochs = 5 batch_size = 64 optimizer = keras.optimizers.Adam() loss_fn = keras.losses.SparseCategoricalCrossentropy() train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)) train_dataset = train_dataset.shuffle(buffer_size=1024).batch(batch_size) model = MyCustomModel(units=64, num_classes=10) for epoch in range(epochs): print(f"Epoch {epoch+1}/{epochs}") for step, (x_batch, y_batch) in enumerate(train_dataset): with tf.GradientTape() as tape: logits = model(x_batch, training=True) loss = loss_fn(y_batch, logits) gradients = tape.gradient(loss, model.trainable_weights) optimizer.apply_gradients(zip(gradients, model.trainable_weights)) if step % 100 == 0: print(f"Step {step}, Loss: {loss.numpy():.4f}") __ __