def ml_1(epochs, lay1, lay2):
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(3,)),
tf.keras.layers.Dense(lay1, activation='relu'),
tf.keras.layers.Dense(lay2, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
optimizer = tf.keras.optimizers.SGD(learning_rate=1e-3)
loss_fn = tf.keras.losses.BinaryCrossentropy()
for epoch in range(epochs):
for i in range(1, 100):
X_train, X_test, y_train, y_test = get_data(i)
# this returns (n x 3) dataframe of digits for x and series of boolean for y, both x and y are converted into tensors using tf.convert_to_tensor()
with tf.GradientTape() as tape:
logits = model(X_train, training=True)
loss_value = loss_fn(y_train, logits)
print(loss_value)
grads = tape.gradient(loss_value, model.trainable_weights)
optimizer.apply_gradients(zip(grads, model.trainable_weights))
I have this function that should train abinary neural network model. each time I call get data with a new i. it returns a new (X_train, X_test, y_train, y_test). but its not working. print(loss_value) prints nan everytime. what am I doing wrong, am I choosing the right loss function?