Redes Neurais Artificiais
Em Python, usando a biblioteca Scikit-Learn
Instalação do Python (+ bibliotecas)
Tratamento dos dados
1) Instalando o Python (3.7 ou superior)
https://www.python.org/downloads/
✓ Adicionar Python ao PATH
2) Instalando Numpy, Scikit-Learn, Pandas e joblib
No Prompt de Comando (Windows=>cmd), digitar:
→ pip3 install numpy scikit-learn pandas joblib
Instalando as bibliotecas necessárias
Digitar no Prompt de Comando do Windows (cmd):
Exportar como CSV:
→ Inputs
→ Targets
→ Teste(Inputs)
inputs.csv
targets.csv
teste_inputs.csv
Salvar os três arquivos na mesma pasta
Criar o arquivo pelo editor IDLE
File > New File
Nomear e salvar o arquivo
File > Save as...
(exemplo: Rede_Neural)
(salvar na mesma pasta dos 3 CSVs)
Elaboração, treino e simulação da rede neural
Manter os dados (.csv) e o código (.py) na mesma pasta
Mais organizado e evita problemas com diretórios dentro do Python
Utilizar o IDLE (editor) para criar os algoritmos
No IDLE, o atalho para rodar o seu código é ‘F5’
Abrir o arquivo e digitar a programação:
Redes Neurais Artificiais
de
Regressão
Dados personalizáveis
pelo usuário
Importa os módulos necessários para
o funcionamento da rede
Carregando os dados na rede;
Criando e treinando a rede;
‘Printando’ %acerto e erros.
Armazenando os resultados preditos pela rede;
Calculando R2 (Coeficiente de correlação).
Carregando os dados de teste na rede;
# REDES NEURAIS ARTIFICIAIS DE REGRESSAO
(OPÇÃO 1)
import
numpy
as
np
from
sklearn.neural_network
import
MLPRegressor
from
sklearn.metrics
import
r2_score
# ^^^acima eh a importacao de modulos necessarios para o funcionamento da rede
# TREINAMENTO DA REDE NEURAL
x_train_path =
'inputs_treino.csv'
#substituir pelo caminho para o arquivo das entradas
y_train_path =
'targets_treino.csv'
#substituir pelo caminho para o arquivo dos alvos
neurons = 12
# editar com o numero de neuronios para o modelo
epochs = 10000
# numero de epocas, editar caso necessario
x_train = np.genfromtxt(x_train_path,
delimiter=';'
)
y_train = np.genfromtxt(y_train_path,
delimiter=';'
)
NN = MLPRegressor(
hidden_layer_sizes
=(neurons),
max_iter
=(epochs),
verbose
=True)
NN.fit(x_train,y_train)
# SALVAR A REDE - INICIO
---import
pickle
with
open(
'nome_da_rede'
,
'wb+'
)
as
savefile:
# alterar 'nome_da_rede' caso queira renomear o arquivo
pickle.dump(NN,savefile
) # alterar NN, caso NN nao seja a variavel que armazena a rede
# A rede neural se encontrara na mesma pasta que o código (.py),
# nomeada como 'nome_da_rede' (sem extensao)
# SALVAR A REDE - FIM
---print(
'%Acerto: '
, NN.score(x_train,y_train)*100)
print(
'Perdas: '
, NN.loss_)
# VERIFICACAO DO R2 - INICIO ---
-# Armazenando os resultados preditos pela rede
# Calcula do R2 (coeficiente de correlacao)
y_predicted = NN.predict(x_train)
print(
'R2: '
, r2_score(y_train,y_predicted))
input()
# USO DA REDE NEURAL PARA PREDICAO - INICIO
---# Carregando os dados de teste na rede
# Imprimir todas as predicoes feitas pelo modelo
x_test_path =
'inputs_teste.csv'
# substituir pelo caminho para o arquivo dos testes
x_test = np.genfromtxt(x_test_path,
delimiter
=';')
print(
'Predicoes:'
)
print(NN.predict(x_test))
# USO DA REDE NEURAL PARA PREDICAO - FIM
---input()
---# Extraindo pesos das entradas para a camada escondida
NN.coefs_[0]
# (pesos camadas)
NN.intercepts_[0]
# (pesos bias)
# Extraindo pesos da camada escondida para as saídas
NN.coefs_[1]
# (pesos camadas)
# ABRIR UMA REDE NEURAL SALVA
INICIO---# Inserir o seguinte código logo no inicio do algoritimo que ira trabalhar com a
rede neural:
import
pickle
with
open(
'nome_da_rede'
,
'rb+'
)
as
loadfile:
NN = pickle.load(loadfile)
# Daqui para frente, escrever suas próprias funções
# A rede 'nome_da_rede' sera carregada dentro da variavel NN
# ABRIR UMA REDE NEURAL SALVA FIM
# REDES NEURAIS ARTIFICIAIS DE REGRESSAO COM COLAB
(OPÇÃO 2)
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import r2_score
from sklearn import preprocessing
import numpy as np
import pandas as pd
import csv
#se usar google colab colocar 1 usar_google_colab =0
if usar_google_colab==1:
# se for usar google colab
from google.colab import files
import io
uploaded = files.upload()
data = io.BytesIO(uploaded['Inputs_Targets_Equacao_2020_06_06_Python.csv']) #Colocar somente o nome do arquivo e nao o caminho
df = pd.read_csv("Inputs_Targets_Equacao_2020_06_06_Python.csv",sep=";",decimal=",") #Colocar somente o nome do arquivo e nao o caminho
#,header=None) - Inserir dentro do parenteses do df caso queira que leia a primeira linha do arquivo
else :
#Leitura do arquivo (OBS: Ao colocar o caminho, observe a raiz (C:\ ou D:\ ou F:\) df = pd.read_csv("“C:\CaminnhoDoArquivo\NomeDoArquivo.csv",sep=";",decimal=",")
#realização da normalização
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(-1,1)) x_scaled = min_max_scaler.fit_transform(df)
#converte matriz para dataframe poder separar o X e Y df = pd.DataFrame(x_scaled)
#Separa os dados X e Y
x_train_norm = df.iloc[:,:3] # neste caso coleta os dados das 3 primeiras colunas que são os Inputs y_train_norm = df.iloc[:,3] # neste caso coleta os dados da ultima coluna que são os Targets
neurons = 12 # editar com o numero de neuronios para o modelo epochs = 10000 # numero de epocas, editar caso necessario
NN = MLPRegressor(hidden_layer_sizes=(neurons), max_iter=(epochs),tol=0.0000001,activation ='tanh', verbose=True) NN.fit(x_train_norm,y_train_norm)
print('---')
print('%Acerto: ', NN.score(x_train_norm,y_train_norm)*100) print('Perdas: ', NN.loss_)
# VERIFICACAO DO R2 - INICIO
---# Armazenando os resultados preditos pela rede
# Calcula do R2 (coeficiente de correlacao)
y_predicted_norm = NN.predict(x_train_norm)
y_predicted_norm = pd.DataFrame(y_predicted_norm)
print('R2: ', r2_score(y_train_norm,y_predicted_norm))
# VERIFICACAO DO R2 - FIM
---# SALVAR A REDE - INICIO
---import
pickle
with open('network_tanh-1a1', 'wb+') as savefile: # alterar 'nome_da_rede' caso queira renomear o arquivo
pickle.dump(NN,savefile) # alterar NN, caso NN nao seja a variavel que armazena a rede
# A rede neural se encontrara na mesma pasta que o código (.py),
# nomeada como 'nome_da_rede' (sem extensao)
---#Concatena X com o a variável prevista pelo modelo, válido para matrizes numpy x_ypredicted_norm = np.concatenate((x_train_norm, y_predicted_norm), axis=1) #Realizando a desnormalização
unscaled = min_max_scaler.inverse_transform(x_ypredicted_norm) unscaled = pd.DataFrame(unscaled)
if usar_google_colab==1:
# se for usar google colab import google
pd.DataFrame.to_csv(unscaled, 'export_dataframe_Inputs_PredictionsColab.csv') google.colab.files.download('export_dataframe_Inputs_PredictionsColab.csv') google.colab.files.download('network_tanh-1a1')
else:
export_csv = unscaled.to_csv (r’C:\CaminhoDoArquivo\export_dataframe.csv', index = None, header=True) print('---')
print('Output do TREINAMENTO/Predicao') print(unscaled)
# EXTRAINDO PESOS DAS CAMADAS E DAS BIAS INICIO ---# Extraindo pesos das entradas para a camada escondida
print('---')
print('pesos das entradas para a camada escondida')
print(NN.coefs_[0]) # (pesos camadas) input()
print('---')
print('pesos das Bias da camada escondida')
print(NN.intercepts_[0]) # (pesos bias) input()
# Extraindo pesos da camada escondida para as saídas print('---')
print('pesos da camada escondida para a camada de saida') print(NN.coefs_[1]) # (pesos camadas) input()
print('---')
print('pesos das Bias da camada de saida')
print(NN.intercepts_[1]) # (pesos bias) input()
# EXTRAINDO PESOS DAS CAMADAS E DAS BIAS FIM ---# FIM DA PROGRAMACAO
---# REDES NEURAIS ARTIFICIAIS DE REGRESSAO COM COLAB E SIMULAÇÃO
(OPÇÃO 3)
CRIAÇÃO DA REDE NEURAL
from sklearn.neural_network import MLPRegressor from sklearn.metrics import r2_score
from sklearn import preprocessing #from sklearn.externals import joblib import joblib
import numpy as np import pandas as pd
#se usar google colab colocar 1 usar_google_colab =0
if usar_google_colab==1: # se for usar google colab
from google.colab import files import io
uploaded = files.upload()
data = io.BytesIO(uploaded['Inputs_Targets_Eq_20200606b_Py.csv']) #Colocar somente o nome do arquivo e nao o caminho df = pd.read_csv("Inputs_Targets_Eq_20200606b_Py.csv",sep=";",decimal=",") #Colocar somente o nome do arquivo e nao o caminho
#,header=None) - Inserir dentro do parenteses do df caso queira que leia a primeira linha do arquivo else:
#Leitura do arquivo (OBS: Ao colocar o caminho, observe a raiz (C:\ ou D:\ ou F:\) df =
pd.read_csv("D:\MARCELO\IFES\Graduacao\Eng_Metalurgica\Disciplinas\Control_Sim_Process\Aulas_Marcelo_Contr_Sim_P
roc_Eng\Python\Exemplos_RNA_Python\Colab.Research\Engenharia_2020-1\ANN_Com_Simulacao\Com_Download\ANN_Eq_20200606_Bom\Inputs_Targets_Eq_20200606b_Py.csv",sep=";",decimal=", ")
#converte matriz para dataframe e separa os dados X e Y
x_train = pd.DataFrame(df.iloc[:,:3]) # neste caso coleta os dados das 3 primeiras colunas que são os Inputs y_train = pd.DataFrame(df.iloc[:,3]) # neste caso coleta os dados da ultima coluna que são os Targets
#realização da normalização do x min_max_scaler_x = preprocessing.MinMaxScaler(feature_range=(-1,1)) x_train_norm = min_max_scaler_x.fit_transform(x_train) joblib.dump(min_max_scaler_x,"min_max_scaler_x") #realização da normalização do y min_max_scaler_y = preprocessing.MinMaxScaler(feature_range=(-1,1)) y_train_norm = min_max_scaler_y.fit_transform(y_train) joblib.dump(min_max_scaler_y,"min_max_scaler_y") if usar_google_colab==1: files.download('min_max_scaler_x') files.download('min_max_scaler_y’)
neurons = 12 # editar com o numero de neuronios para o modelo epochs = 10000 # numero de epocas, editar caso necessario
NN = MLPRegressor(hidden_layer_sizes=(neurons), max_iter=(epochs),tol=0.0000001,activation ='tanh', verbose=True) NN.fit(x_train_norm,y_train_norm)
print('---')
print('%Acerto: ', NN.score(x_train_norm,y_train_norm)*100) print('Perdas: ', NN.loss_)
# VERIFICACAO DO R2 - INICIO ---# Armazenando os resultados preditos pela rede # Calcula do R2 (coeficiente de correlacao)
y_predicted_norm = NN.predict(x_train_norm) y_predicted_norm = pd.DataFrame(y_predicted_norm) #Realizando a desnormalização do Y y_predict_unnorm = min_max_scaler_y.inverse_transform(y_predicted_norm) print('---') print('output_Train:') print(y_predict_unnorm) print('---') print('R2: ', r2_score(y_train_norm,y_predicted_norm)) # VERIFICACAO DO R2 - FIM
---# SALVAR A REDE - INICIO ---import pickle
with open('network_tanh-1a1', 'wb+') as savefile: # alterar 'nome_da_rede' caso queira renomear o arquivo pickle.dump(NN,savefile) # alterar NN, caso NN nao seja a variavel que armazena a rede
# A rede neural se encontrara na mesma pasta que o código (.py), # nomeada como 'nome_da_rede' (sem extensao)
if usar_google_colab==1:
files.download('network_tanh-1a1')
---#Concatena X com o a variável prevista pelo modelo, válido para matrizes numpy x_ypredicted_unnorm = np.concatenate((x_train, y_predict_unnorm), axis=1)
x_ypredicted_unnorm = pd.DataFrame(x_ypredicted_unnorm) if usar_google_colab==1:
x_ypredicted_unnorm.to_csv (r'Input-Output_Train_export_dat.csv', index = None, header=True) files.download('Input-Output_Train_export_dat.csv')
else:
export_csv = x_ypredicted_unnorm.to_csv
(r'D:\MARCELO\IFES\Graduacao\Eng_Metalurgica\Disciplinas\Control_Sim_Process\Aulas_Marcelo_Contr_Sim_Proc_Eng\Pyt
hon\Exemplos_RNA_Python\Colab.Research\Engenharia_2020-1\ANN_Com_Simulacao\Com_Download\ANN_Eq_20200606_Bom\Input-Output_Train_export_dat.csv', index = None, header=True)
print('---')
print('Input and Output do TREINAMENTO/Predicao') print(x_ypredicted_unnorm.head)
# EXTRAINDO PESOS DAS CAMADAS E DAS BIAS INICIO ---# Extraindo pesos das entradas para a camada escondida
print('---')
print('pesos das entradas para a camada escondida')
print(NN.coefs_[0]) # (pesos camadas) input()
print('---')
print('pesos das Bias da camada escondida')
print(NN.intercepts_[0]) # (pesos bias) input()
# Extraindo pesos da camada escondida para as saídas print('---')
print('pesos da camada escondida para a camada de saida') print(NN.coefs_[1]) # (pesos camadas) input()
print('---')
print('pesos das Bias da camada de saida')
print(NN.intercepts_[1]) # (pesos bias) input()
# EXTRAINDO PESOS DAS CAMADAS E DAS BIAS FIM ---# FIM DA PROGRAMACAO
---# REDES NEURAIS ARTIFICIAIS DE REGRESSAO CRIAÇÃO E SIMULAÇÃODE REDE
(OPÇÃO 3)
SIMULAÇÃO DA REDE NEURAL
#from sklearn.externals import joblib import joblib import numpy as np import pandas as pd import pickle usar_google_colab =0 if usar_google_colab==1: # se for usar google colab
from google.colab import files import io
uploaded = files.upload()
data = io.BytesIO(uploaded['Inputs_SIM_Eq_20200606b_Py.csv']) #Colocar somente o nome do arquivo e nao o caminho df = pd.read_csv("Inputs_SIM_Eq_20200606b_Py.csv",sep=";",decimal=",") uploaded = files.upload() data = io.BytesIO(uploaded['min_max_scaler_x']) uploaded = files.upload() data = io.BytesIO(uploaded['min_max_scaler_y']) uploaded = files.upload() data = io.BytesIO(uploaded['network_tanh-1a1'])
else: df = pd.read_csv("D:\MARCELO\IFES\Graduacao\Eng_Metalurgica\Disciplinas\Control_Sim_Process\Aulas_Marcelo_Contr_Sim_P roc_Eng\Python\Exemplos_RNA_Python\Colab.Research\Engenharia_2020-1\ANN_Com_Simulacao\Com_Download\ANN_Eq_20200606_Bom\Inputs_SIM_Eq_20200606b_Py.csv",sep=";",decimal=",",h eader=None) min_max_scaler_x = joblib.load("D:\MARCELO\IFES\Graduacao\Eng_Metalurgica\Disciplinas\Control_Sim_Process\Aulas_Marcelo_Contr_Sim_Pro c_Eng\Python\Exemplos_RNA_Python\Colab.Research\Engenharia_2020-1\ANN_Com_Simulacao\Com_Download\ANN_Eq_20200606_Bom\min_max_scaler_x") min_max_scaler_y = joblib.load("D:\MARCELO\IFES\Graduacao\Eng_Metalurgica\Disciplinas\Control_Sim_Process\Aulas_Marcelo_Contr_Sim_Pro c_Eng\Python\Exemplos_RNA_Python\Colab.Research\Engenharia_2020-1\ANN_Com_Simulacao\Com_Download\ANN_Eq_20200606_Bom\min_max_scaler_y")
x_simulacao = pd.DataFrame(df.iloc[:,:3])
x_simulacao_norm = min_max_scaler_x.fit_transform(x_simulacao)
#Carrega o modelo
filename = 'network_tanh-1a1'
NN = pickle.load(open(filename, 'rb')) #executa a predição do modelo
y_predicted_norm = NN.predict(x_simulacao_norm) y_predicted_norm = pd.DataFrame(y_predicted_norm) #Desnormaliza o resultado do modelo
y_predict_unnorm = min_max_scaler_y.inverse_transform(y_predicted_norm) #Concatena os dados de entrada com o previsto pelo modelo
x_ypredicted_unnorm = np.concatenate((x_simulacao, y_predict_unnorm), axis=1) x_ypredicted_unnorm = pd.DataFrame(x_ypredicted_unnorm)
if usar_google_colab==1:
x_ypredicted_unnorm.to_csv (r'Input-Out_Sim_export_dat.csv', index = None, header=True) files.download('Input-Out_Sim_export_dat.csv')
else:
export_csv = x_ypredicted_unnorm.to_csv
(r'D:\MARCELO\IFES\Graduacao\Eng_Metalurgica\Disciplinas\Control_Sim_Process\Aulas_Marcelo_Contr_Sim_Proc_Eng\P
ython\Exemplos_RNA_Python\Colab.Research\Engenharia_2020-1\ANN_Com_Simulacao\Com_Download\ANN_Eq_20200606_Bom\Input-Out_Sim_export_dat.csv', index = None, header=True)
print('---')
print('Input and Output da Simulacao') print(x_ypredicted_unnorm.head)