Skip to content

Commit

Permalink
Merge pull request #7 from TailUFPB/neural-network-parameters
Browse files Browse the repository at this point in the history
Neural network parameters
  • Loading branch information
jonasgabriel18 authored Dec 17, 2023
2 parents ce29fed + ecaba81 commit 5bc313c
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 5 deletions.
43 changes: 39 additions & 4 deletions api/Neural_Network2.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from tensorflow.keras.layers import TextVectorization
from tensorflow.keras.models import Sequential
from sklearn.preprocessing import LabelEncoder

import joblib
def preprocess_text(text):
text = text.lower()
text = re.sub('\[.*?\]', '', text)
Expand All @@ -20,13 +20,18 @@ def preprocess_text(text):
text = re.sub('\w*\d\w*', '', text)
return text

def create_and_train_model(train_texts, train_labels, name, epochs=5):
def create_and_train_model(train_texts, train_labels, name, epochs=5, batch_size=32):
label_encoder = LabelEncoder()
train_labels_encoded = label_encoder.fit_transform(train_labels)

num_classes = len(label_encoder.classes_)
train_labels_one_hot = tf.keras.utils.to_categorical(train_labels_encoded, num_classes=num_classes)

# Salva o mapeamento de rótulos em um arquivo
label_mapping_filename = f"models/LabelMapping-{name}.joblib"
joblib.dump(label_encoder, label_mapping_filename)


print(train_texts)
print(train_labels_one_hot)

Expand Down Expand Up @@ -76,11 +81,11 @@ def vectorize_text(text, label):
predictions = layers.Dense(num_classes, activation="softmax", name="predictions")(x)

# Cria e compila o modelo
model = tf.keras.Model(inputs, predictions)
model = tf.keras.Model(inputs, predictions, name)
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

# Treina o modelo
history = model.fit(train_ds, epochs=epochs)
history = model.fit(train_ds, epochs=epochs, batch_size=batch_size)

# Salva o modelo
model_filename = f"models/Trained-Model-{name}.keras"
Expand All @@ -98,6 +103,36 @@ def vectorize_text(text, label):
except Exception as e:
return f"Error during model creation/training: {str(e)}"

def predict_with_label_mapping_nn(model_name, test_texts):
# Cria uma camada de vetorização de texto
vectorize_layer = TextVectorization(
max_tokens=20000,
output_mode="int",
output_sequence_length=500,
)
# Carrega o modelo treinado
model = tf.keras.models.load_model(f"models/Trained-Model-{model_name}.keras")

# Carrega o mapeamento de rótulos
label_mapping_filename = f"models/LabelMapping-{model_name}.joblib"
label_encoder = joblib.load(label_mapping_filename)

# Aplica o pré-processamento aos textos de teste
test_texts = [preprocess_text(text) for text in test_texts]

# Vetoriza os textos de teste usando a mesma camada de vetorização
test_ds = vectorize_layer(np.array(test_texts)).numpy()

# Faz previsões
predictions = model.predict(test_ds)

# Destransforma as previsões usando o mapeamento de rótulos
predicted_labels_encoded = np.argmax(predictions, axis=1)
predicted_labels = [label_encoder.classes_[label] for label in predicted_labels_encoded]

return predicted_labels


'''
Com o nome do arquivo podemos fazer por exemplo:
Expand Down
4 changes: 3 additions & 1 deletion api/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ def train_model():
selected_data = received_data.get('data')
selected_label = received_data.get('label')
name = received_data.get('name')
return create_and_train_model(selected_data,selected_label,name)
epochs = received_data.get('epochs')
batch_size = received_data.get('batch_size')
return create_and_train_model(selected_data, selected_label, name, epochs, batch_size)

if __name__ == '__main__':
server_thread = threading.Thread(target=run_flask_app)
Expand Down

0 comments on commit 5bc313c

Please sign in to comment.