import os from keras.layers import Dense from keras.models import Sequential from keras.utils import to_categorical from sklearn.model_selection import train_test_split from tensorflow import keras from ucimlrepo import fetch_ucirepo os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true" def make_model(): model = Sequential() model.add(Dense(12, input_dim=16, activation="relu")) model.add(Dense(8, activation="relu")) model.add(Dense(7, activation="softmax")) return model def get_data(): # fetch dataset dry_bean_dataset = fetch_ucirepo(id=602) # data (as pandas dataframes) X = dry_bean_dataset.data.features y = dry_bean_dataset.data.targets x = X.to_numpy() # object to categorical x = x.astype("float32") y_class = to_categorical(y) # metadata # print(dry_bean_dataset.metadata) # variable information # print(dry_bean_dataset.variables) # print(X.head()) # print(y.head()) # y_class = to_categorical(y) x_train, x_test, y_train, y_test = train_test_split( x, y_class, test_size=0.2, random_state=42, shuffle=True ) return x_train, x_test, y_train, y_test x_train, x_test, y_train, y_test = get_data() model = make_model() early_stopping = keras.callbacks.EarlyStopping( patience=10, min_delta=0.001, restore_best_weights=True ) model.compile( loss="sparse_categorical_crossentropy", optimizer="adam", metrics=["accuracy", "mse"], ) model.summary() history = model.fit( x_train, y_train, epochs=150, batch_size=10, callbacks=[early_stopping] ) score = model.evaluate(x_test, y_test, verbose=2)