<jupyter_start><jupyter_text>Rede Neural Multicamadas (MPL)Uma rede MPL é uma classe de rede neural artificial *feedforward* (ANN). Um MLP consiste em pelo menos três camadas de nós: uma camada de entrada , uma camada oculta e uma camada de saída . Exceto para os nós de entrada, cada nó é um neurônio que usa uma função de ativação não linear . O MLP utiliza uma técnica de aprendizado supervisionado chamada *backpropagation* para treinamento. Implementando uma RNA multicamadasA imagem a seguir mostra a nossa rede, com as unidades de entrada marcadas como Input1, Input2 e Input3 (**Input Layer**) conectadas com os *nós* da camada oculta (**Hidden Layer**). Por sua vez as saída dos *nós* da camada oculda servem como entrada para os *nós*  da camada de saída (**Output Layer**).    Diagrama de uma MPL  Lembrando que em cada *nó* temos: $$f(h) = sigmoid(h)=\frac 1 {1+e^{-h}}$$  onde $$h = \frac 1n\sum_{i=1}^n(w_i*x_i)+b$$        Configuração da MPL<jupyter_code>#Importando a biblioteca
import numpy as np

#Função do cáculo da sigmóide
def sigmoid(x):
    return 1/(1+np.exp(-x))

#Arquitetura da MPL
N_input = 3
N_hidden = 4
N_output = 2

#Vetor dos valores de entrada
x = np.array([0.5, 0.1, -0.2])
target =np.array([0.3, 0.8])
learnrate = 0.5

#Pesos da Camada Oculta

weights_input_hidden = np.array([[-0.08,  0.08, -0.03, 0.03],
                              [ 0.05,  0.10,  0.07, 0.02],
                              [-0.07,  0.04, -0.01, 0.01]])

#Pesos da Camada de Saída
weights_hidden_output = np.array([[-0.18,  0.11],
                               [-0.09,  0.05],
                               [-0.04,  0.05],
                               [-0.02,  0.07]])<jupyter_output><empty_output><jupyter_text>Forward Pass<jupyter_code>#Camada oculta

#Calcule a combinação linear de entradas e pesos sinápticos
hidden_layer_input = np.dot(x, weights_input_hidden)
#Aplicado a função de ativação
hidden_layer_output = sigmoid(hidden_layer_input)

#Camada de Saída

#Calcule a combinação linear de entradas e pesos sinápticos
output_layer_in = np.dot(hidden_layer_output, weights_hidden_output)

#Aplicado a função de ativação 
output = sigmoid(output_layer_in)

print('As saídas da rede são',output)<jupyter_output><empty_output><jupyter_text>Backward Pass<jupyter_code>## TODO: Cálculo do Erro
error = None
#print('Erro da Rede: ',error)

# TODO: Calcule o termo de erro de saída (Gradiente da Camada de Saída)
output_error_term = None


# TODO: Calcule a contribuição da camada oculta para o erro
hidden_error = None


# TODO: Calcule o termo de erro da camada oculta (Gradiente da Camada Oculta)
hidden_error_term = None

# TODO: Calcule a variação do peso da camada de saída
delta_w_h_o = None
print('delta_w_h_o: ',delta_w_h_o)

# TODO: Calcule a variação do peso da camada oculta
delta_w_i_h = None
print('delta_w_i_h: ',delta_w_i_h)<jupyter_output><empty_output><jupyter_text>Atualização dos Pesos<jupyter_code>weights_input_hidden = learnrate * delta_w_i_h
print('weights_input_hidden: ',weights_input_hidden)
weights_hidden_output = learnrate * delta_w_h_o
print('weights_hidden_output: ',weights_hidden_output)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09892541087231353, 'fraction_numerical': 0.02654867256637168, 'mean_word_length': 3.984251968503937, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '199502', 'license': 'MIT', 'n_tokens_mistral': 1241, 'n_tokens_neox': 1187, 'n_words': 352, 'path': 'T-RNA/Tarefa-5/Tarefa5 - RNA MPL backward.ipynb', 'repo_name': 'EdTonatto/UFFS-2020.2-Inteligencia_Artificial', 'size': '3164'}