• Nenhum resultado encontrado

PASSO A PASSO Python RNA Scikit learn MarceloLucas

N/A
N/A
Protected

Academic year: 2021

Share "PASSO A PASSO Python RNA Scikit learn MarceloLucas"

Copied!
51
0
0

Texto

(1)

Redes Neurais Artificiais

Em Python, usando a biblioteca Scikit-Learn

(2)

Instalação do Python (+ bibliotecas)

Tratamento dos dados

(3)

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

(4)

Instalando as bibliotecas necessárias

Digitar no Prompt de Comando do Windows (cmd):

(5)

Exportar como CSV:

→ Inputs

→ Targets

→ Teste(Inputs)

(6)

inputs.csv

targets.csv

teste_inputs.csv

Salvar os três arquivos na mesma pasta

(7)

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)

(8)

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’

(9)

Abrir o arquivo e digitar a programação:

(10)
(11)
(12)
(13)
(14)
(15)

Redes Neurais Artificiais

de

Regressão

(16)

Dados personalizáveis

pelo usuário

(17)

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;

(18)

# 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)

(19)

# 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_)

(20)

# 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()

(21)

# 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()

(22)

---# 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)

(23)

# 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

(24)

# 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=",")

(25)

#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_)

(26)

# 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)

(27)

---#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)

(28)

# 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

(29)

---# 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

(30)

#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=", ")

(31)

#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’)

(32)

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_)

(33)

# 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

(34)

---# 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')

(35)

---#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)

(36)

# 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

(37)

---# 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'])

(38)

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")

(39)

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)

(40)

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)

(41)

Redes Neurais Artificiais

de

Classificação

(42)

Dados personalizáveis

pelo usuário

(43)

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 a Matriz de Confusão.

Carregando os dados de teste na rede;

(44)

# REDES NEURAIS ARTIFICIAIS DE CLASSIFICACAO

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)

(45)

# 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_)

(46)

# VERIFICACAO DA MATRIZ DE CONFUSAO - INICIO

---y_predicted = NN.predict(x_train)

print(

'Matriz de confusao:'

)

print(confusion_matrix(ytrain,ypredicted))

input()

(47)

---# 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.genfrontxt(x_test_path, delimiter=

';'

)

print(

'Predicoes:'

)

print(NN.predict(x_test))

# USO DA REDE NEURAL PARA PREDICAO - FIM

---input()

(48)

---print(alguma_variável/’texto’)

Imprime no console o valor de alguma variável ou função

Texto pode ser exibido – precisa ser colocado entre

‘aspas’

input()

(Opcional) Recebe os inputs do usuário e resume com

ENTER

Nos casos anteriores, o input() serve apenas para pausar o código

(49)

Os hiperparâmetros utilizados nos códigos de exemplos são só

alguns dentre vários argumentos que podem ser configurados

NN1 = MLPClassifier(lista_de_hiperparâmetros)

NN2 = MLPRegressor(lista_de_hiperparâmetros)

Dica: Conferir a documentação do Scikit-Learn para verificar

todos os valores passíveis de ajustes

(50)

Link da documentação e tutorial oficial do Python 3

Python 3 Official Docs

Link da documentação do Scikit-Learn (Todos os parâmetros)

Scikit-Learn

– MLPRegressor

Scikit-Learn

– MLPClassifier

(51)

Links do vídeo no YouTube explicando uso do Python no

Google Colab Research

Video

“MELHOR FORMA DE APRENDER PYTHON (Google Colab Notebook)”

https://www.youtube.com/watch?v=Gojqw9BQ5qY

Video Data Science: Introdução a Ciência de Dados (Primeira aula prática

programando em Python)

https://www.youtube.com/watch?v=F608hzn_ygo

Documentações adicionais

Referências

Documentos relacionados

O principal objetivo deste Projeto de Doutoramento é compreender de que modo é que as tecnologias de informação móveis, relacionadas com o desenvolvi- mento das aplicações

CONCLUSÕES: Há correlação positiva entre o IP neonatal e concentração de leptina materna em gestantes diabéticas usuárias de insulina; há correlação positiva entre

Esta foliação ocorre ao longo de faixas miloníticas, com espessura desde submilimétrica (Fig. 23) até métrica, nas quais é caracterizada pela orientação de ribbons

Quando o diálogo Expert Level Parameter aparecer, selecione Variable Selection, , então a seguinte caixa de diálogo aparecerá:... Este diálogo também pode ser acessado através

A importância deste trabalho dá-se pelo fato das disciplinas buscarem, conjuntamente, “estimular, nos alunos, o senso de preservação da memória social coletiva,

A caracterização da arborização urbana do município de Alagoinhas envolve o alcance de objetivos específicos tais como: realizar estudo no qual serão coletados dados como estado

O aprendizado das crianças disléxicas não é impossível, mas os professores tem que procurar meios que venham a auxiliar este aprendizado, pois elas tem dificuldade em aprender no

É termo utilizado para descrever um método de ataque, onde alguém faz uso da persuasão, muitas vezes abusando da ingenuidade ou confiança do usuário, para obter informações que