Este repositório tem objetivo de estudar e desenvolver modelos de regressões com uso de inteligência artificial, baseados em imagens de solos utilizando aprendizado supervisionado para predizer propriedades químicas dos solos como carbono e nitrogênio.
Caso rode local, pule esta etapa... Mas lembre de ter os fontes já baixados.
Aqui é para lembrar de acessar o ambiente UTFPR caso faça o treinamento e teste por lá.
Para auxílio, está criado o arquivo: ssh-UTFPR
chmod +x ssh-UTFPR
./ssh-UTFPR
A estrutura do fonte foi criada sobre o VENV, ou seja, crie ou acesse seu ambiente. Procure usar python 3.10 ou superior.
Arquivo: source-env ajudará quando estiver no ambiente UTFPR:
source source-env
Primeiro, vamos atualizar o PIP
pip install --upgrade pip
Agora vamos instalar os pacotes que estão no arquivo: requirements_UTFPR_py3.10.txt
pip install -r requirements_UTFPR_py3.10.txt
As pastas principais são:
- raiz do fonte: contém os fontes principais para auxílio dos modelos.
- models: centraliza os fontes de desenvolvimento de cada modelo de regressão.
Considerando que você já entrou no seu ambiente VENV, vamos executar o arquivo main.py
.
O arquivo main main.py
serve para rodar o treinamento e teste do modelo, contém vários parâmetros de configurações.
Para conhecer os parâmetros basta executar o comando python3 main.py -h
.
usage: main.py [-h] [-e EPOCHS] [-G GRID_SEARCH_TRIALS] [-i AMOUNT_IMAGE_TRAIN] [-I AMOUNT_IMAGE_TEST] [-L LOG_LEVEL] [-m MODEL] [-M] [-n NAME] [-p] [-P PATIENCE] [-S] [-t] [-T]
options:
-h, --help show this help message and exit
-e EPOCHS, --epochs EPOCHS
Quantidade de épocas para o treino - [Modelos TransferLearning/CNN]
-G GRID_SEARCH_TRIALS, --grid_search_trials GRID_SEARCH_TRIALS
Treinar modelos com diversos hyperparametros (setar > 0 para rodar) - [Modelos TransferLearning/CNN hardcoded]
-i AMOUNT_IMAGE_TRAIN, --amount_image_train AMOUNT_IMAGE_TRAIN
Quantidade de imagens para treino
-I AMOUNT_IMAGE_TEST, --amount_image_test AMOUNT_IMAGE_TEST
Quantidade de imagens para test
-L LOG_LEVEL, --log_level LOG_LEVEL
Log Level: [0]-DEBUG, [1]-INFO - DEFAULT
-m MODEL, --model MODEL
Modelo: [0]-ResNet50, [1]-ResNet101, [2]-ResNet152, [10]-ConvNeXtBase, [11]-ConvNeXtXLarge, [20]-EfficientNetB7, [21]-EfficientNetV2S, [22]-EfficientNetV2L, [30]-InceptionResNetV2, [40]-DenseNet169, [50]-VGG19, [100]-CNN,
[500]-XGBRegressor, [510]-LinearRegression, [520]-SVMLinearRegression, [521]-SVMRBFRegressor
-M, --show_model Mostra na tela os layers do modelo - [Modelos TransferLearning/CNN]
-n NAME, --name NAME Nome do arquivo/diretório de saída do modelo .tf
-p, --preprocess Preprocessar imagem 'model.preprocess_input(...)' - [Modelos TransferLearning]
-P PATIENCE, --patience PATIENCE
Quantidade de paciência no early stopping - [Modelos TransferLearning/CNN]
-S, --separed Separar dados de treino e validação - [Modelos TransferLearning, CNN]
-t, --trainable Define se terá as camadas do modelo de transfer-learning treináveis ou não - [Modelos TransferLearning]
-T, --Test Define execução apenas para o teste - [Modelos TransferLearning]
O padrão de execução sempre é treinamento + teste, porém você pode escolher apenas testar se desejar, veja o tópico a seguir.
python3 main.py -n NomeDoMolo.tf -m 40 -p -P 2
... ... ... ... ...
O código abaixo irá procurar o modelo já gerado com o nome NomeDoMolo.tf, e executar o teste.
python3 main.py -n NomeDoMolo.tf -T
- -n NAME, --name NAME Nome do arquivo/diretório de saída do modelo .tf
- -T, --Test Define execução apenas para o teste - [Modelos TransferLearning]
SCP refere-se ao "Secure Copy Protocol" ou "Secure Copy", que é um protocolo de transferência de arquivos seguro. O SCP permite transferir arquivos entre computadores de maneira segura através de uma conexão SSH (Secure Shell).
Qualquer dúvida poderá dar uma olhada nesta documentação: https://linuxize.com/post/how-to-use-scp-command-to-securely-transfer-files/
Diante da sua máquina local (sua máquina), execute o comando abaixo:
scp -P 2222 [email protected]:"/home/users/jrinaldi/source-py3.10/UTFPR-article-soils-regression/last-model.h5" ~/.
- training_02_carbon_parallel
- Config:
- pooling='avg'
- layer.trainable=True
- Struct Model:
- resnet_model.add(tf.keras.layers.Flatten())
- resnet_model.add(tf.keras.layers.Dense(512, activation='relu'))
- resnet_model.add(tf.keras.layers.Dense(256, activation='relu'))
- resnet_model.add(tf.keras.layers.Dropout(0.5))
- resnet_model.add(tf.keras.layers.Dense(1))
- opt = tf.keras.optimizers.RMSprop(0.0001)
- resnet_model.fit(X_train, Y_train_carbono, validation_split=0.3, epochs=300, callbacks=[tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=50, restore_best_weights=True)])
- Summary:
- Stop 141 Epoch
- R2: 0.5658956203990312
Ou seja, diante do dataset de treino, separar ainda uma parte para validação, garantindo que essas amostras não se encontrem no dataset de treino.
Implementar diversas formas de DataArgumentarion para aumentar quantidade de imagens para as amostras.
Após fazer a predição do resultado, verificar a média da porcentagem de carbono de todas as imagens de mesmas amostras (de um mesmo grupo, da imagem original), verificar se esta média se aproxima mais do valor real.
-
Regularização L1 (Lasso): A regularização L1 adiciona um termo à função de perda do modelo, proporcional à soma dos valores absolutos dos coeficientes. É representada pela fórmula: L1 = λ * Σ|wi|, onde wi são os coeficientes do modelo e λ é o parâmetro de regularização. A regularização L1 tende a gerar modelos esparsos, ou seja, alguns coeficientes tornam-se exatamente zero, o que implica na seleção automática de características relevantes.
-
Regularização L2 (Ridge): A regularização L2 adiciona um termo à função de perda do modelo, proporcional à soma dos quadrados dos coeficientes. É representada pela fórmula: L2 = λ * Σwi^2, onde wi são os coeficientes do modelo e λ é o parâmetro de regularização. A regularização L2 tende a penalizar coeficientes grandes, ajudando a evitar overfitting e a melhorar a estabilidade do modelo.
-
Dropout: O Dropout é uma técnica utilizada principalmente em redes neurais, mas pode ser adaptada para outras abordagens de regressão. Durante o treinamento, aleatoriamente, alguns neurônios (ou coeficientes, no contexto de regressão) são "desligados" (ou seja, seus valores são definidos como zero). Essa técnica ajuda a prevenir o overfitting, pois força o modelo a não depender excessivamente de nenhum conjunto específico de características durante o treinamento.
- Adição de Regularização: Adicione técnicas de regularização, como L1 ou L2, às camadas personalizadas para evitar overfitting.
from tensorflow.keras.regularizers import l2
x = Dense(256, activation='relu', kernel_regularizer=l2(0.01))(x)