Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -68,7 +68,7 @@ def get_model_config(model_type, problem_type):
|
|
| 68 |
}
|
| 69 |
}
|
| 70 |
return configs.get(model_type, {}).get(problem_type, {"model_class": None, "params": {}, "grid_params": {}})
|
| 71 |
-
|
| 72 |
def preprocess_data(X_train, X_test, numerical_features, categorical_features):
|
| 73 |
# Define the numeric and categorical transformers
|
| 74 |
numeric_transformer = Pipeline(steps=[
|
|
@@ -102,24 +102,45 @@ def preprocess_data(X_train, X_test, numerical_features, categorical_features):
|
|
| 102 |
feature_names = numerical_features
|
| 103 |
|
| 104 |
return X_train_processed, X_test_processed, feature_names, preprocessor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
|
| 106 |
-
def build_neural_network(input_shape, output_units, problem_type, layers_config, optimizer_name="Adam", learning_rate=0.001):
|
| 107 |
-
model = keras.Sequential([keras.layers.Input(shape=input_shape)])
|
| 108 |
-
for layer in layers_config:
|
| 109 |
-
if layer['type'] == 'dense':
|
| 110 |
-
model.add(keras.layers.Dense(layer['units'], activation=layer['activation']))
|
| 111 |
-
elif layer['type'] == 'dropout':
|
| 112 |
-
model.add(keras.layers.Dropout(layer['rate']))
|
| 113 |
-
if problem_type == "Regression":
|
| 114 |
-
model.add(keras.layers.Dense(1))
|
| 115 |
-
elif problem_type == "Binary Classification":
|
| 116 |
-
model.add(keras.layers.Dense(1, activation='sigmoid'))
|
| 117 |
-
elif problem_type == "Multi-Class":
|
| 118 |
-
model.add(keras.layers.Dense(output_units, activation='softmax'))
|
| 119 |
-
optimizer = {"Adam": keras.optimizers.Adam, "SGD": keras.optimizers.SGD, "RMSprop": keras.optimizers.RMSprop}[optimizer_name](learning_rate=learning_rate)
|
| 120 |
-
model.compile(optimizer=optimizer, loss={"Regression": "mse", "Binary Classification": "binary_crossentropy", "Multi-Class": "categorical_crossentropy"}[problem_type],
|
| 121 |
-
metrics=["mae" if problem_type == "Regression" else "accuracy"])
|
| 122 |
-
return model
|
| 123 |
|
| 124 |
def train_model(model, X_train, y_train, X_test, y_test, epochs, batch_size, problem_type, do_grid_search=False, params=None, grid_params=None, training_placeholder=None):
|
| 125 |
start_time = time.time()
|
|
|
|
| 68 |
}
|
| 69 |
}
|
| 70 |
return configs.get(model_type, {}).get(problem_type, {"model_class": None, "params": {}, "grid_params": {}})
|
| 71 |
+
|
| 72 |
def preprocess_data(X_train, X_test, numerical_features, categorical_features):
|
| 73 |
# Define the numeric and categorical transformers
|
| 74 |
numeric_transformer = Pipeline(steps=[
|
|
|
|
| 102 |
feature_names = numerical_features
|
| 103 |
|
| 104 |
return X_train_processed, X_test_processed, feature_names, preprocessor
|
| 105 |
+
def build_neural_network(input_shape, output_units, problem_type, layers_config, optimizer_name="Adam", loss_function="mse", metrics=["accuracy"]):
|
| 106 |
+
try:
|
| 107 |
+
model = keras.Sequential()
|
| 108 |
+
model.add(keras.layers.InputLayer(input_shape=input_shape))
|
| 109 |
+
for layer in layers_config:
|
| 110 |
+
if layer['type'] == 'dense':
|
| 111 |
+
model.add(keras.layers.Dense(layer['units'], activation=layer['activation']))
|
| 112 |
+
elif layer['type'] == 'dropout':
|
| 113 |
+
model.add(keras.layers.Dropout(layer['rate']))
|
| 114 |
+
elif layer['type'] == 'conv2d':
|
| 115 |
+
model.add(keras.layers.Conv2D(layer['filters'], tuple(layer['kernel_size']), activation=layer['activation']))
|
| 116 |
+
elif layer['type'] == 'lstm':
|
| 117 |
+
model.add(keras.layers.LSTM(layer['units'], activation=layer['activation']))
|
| 118 |
+
elif layer['type'] == 'maxpooling2d':
|
| 119 |
+
model.add(keras.layers.MaxPooling2D(pool_size=tuple(layer['pool_size'])))
|
| 120 |
+
elif layer['type'] == 'flatten':
|
| 121 |
+
model.add(keras.layers.Flatten())
|
| 122 |
+
|
| 123 |
+
if problem_type == "Regression":
|
| 124 |
+
model.add(keras.layers.Dense(1))
|
| 125 |
+
elif problem_type == "Binary Classification":
|
| 126 |
+
model.add(keras.layers.Dense(1, activation='sigmoid'))
|
| 127 |
+
elif problem_type == "Multi-Class":
|
| 128 |
+
model.add(keras.layers.Dense(output_units, activation='softmax'))
|
| 129 |
+
|
| 130 |
+
if optimizer_name == "Adam":
|
| 131 |
+
optimizer = keras.optimizers.Adam()
|
| 132 |
+
elif optimizer_name == "SGD":
|
| 133 |
+
optimizer = keras.optimizers.SGD()
|
| 134 |
+
elif optimizer_name == "RMSprop":
|
| 135 |
+
optimizer = keras.optimizers.RMSprop()
|
| 136 |
+
|
| 137 |
+
model.compile(optimizer=optimizer, loss=loss_function, metrics=metrics)
|
| 138 |
+
return model
|
| 139 |
+
except Exception as e:
|
| 140 |
+
st.error("Failed to build neural network. Check Debug Log for details.")
|
| 141 |
+
#log_error("Error in build_neural_network", e) # ADDED
|
| 142 |
+
raise
|
| 143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
|
| 145 |
def train_model(model, X_train, y_train, X_test, y_test, epochs, batch_size, problem_type, do_grid_search=False, params=None, grid_params=None, training_placeholder=None):
|
| 146 |
start_time = time.time()
|