uma Aprendizagem mais Profunda: Feed Forward Redes Neurais (FFNNs)

Um Profundo Feed Forward Rede Neural (FFNN) — aka multicamadas Perceptron (MLP)

Uma Rede Neural Artificial (ANN) é feito de muitos neurônios interconectados:

Um único Neurônio de uma Rede Neural Artificial (ANN)

Cada neurônio leva em alguns números em ponto flutuante (por exemplo, 1.0, 0.5, -1.0) e multiplica – os por outros números de vírgula flutuante (por exemplo, 0.7, 0.6, 1.4) conhecidos como pesos.(1.0 * 0.7 = 0.7, 0.5 * 0.6 = 0.3, -1.0 * 1.4 = -1.4). Os pesos agem como um mecanismo para focar, ou ignorar, certas entradas.

Pesos agir como soft portas para ignorar algumas características (0) e se concentrar em outros (+1) ou até mesmo inibir (-1)

ponderado entradas, em seguida, obter convocados (por exemplo, 0.7 + 0.3 + -1.4 = -0.4) juntamente com um valor de enviesamento (por exemplo-0.4 + – 0.1 = – 0.5).

O valor somado (x) é agora transformado em um valor de saída (y) de acordo com a função de ativação do neurônio (y = f(x)). Alguns populares ativação de funções são mostradas a seguir:

Uma pequena seleção de Ativação de Funções

e.g. -0.5 → -0.05 se usar o Vazamento Rectificado Unidade Linear (Leaky ReLU) função de ativação: y = f(x) = f(-0.5) = max(0.1*-0.5, -0.5) = max(-0.05, -0.5) = -0.05

o valor de saída do neurônio (por exemplo, -05) é frequentemente uma entrada para outro neurônio.

Um valor de saída do Neurônio, muitas vezes de feeds como uma entrada para outros Neurônios da Rede Neural Artificial (ANN)
O Perceptron, uma das primeiras Redes Neurais, é feita de apenas um único Neurônio

no Entanto, um dos primeiros ANNs era conhecido como o perceptron e é composta de apenas um único neurônio.

O Perceptron

A saída do perceptron é (apenas) do neurônio atua como a previsão final.

Cada Neurônio é linear binário classificador de tudo em sua própria (por exemplo, um valor de saída >= 0 indica o azul de classe, enquanto um valor de saída < 0 indica que a classe vermelho)

Permite que o código de nossa própria Perceptron:

import numpy as npclass Neuron: 
def __init__(self, n_inputs, bias = 0., weights = None):
self.b = bias
if weights: self.ws = np.array(weights)
else: self.ws = np.random.rand(n_inputs)
def __call__(self, xs):
return self._f(xs @ self.ws + self.b)
def _f(self, x):
return max(x*.1, x)

(Nota: não incluímos qualquer algoritmo de aprendizagem, em nosso exemplo acima — abordaremos os algoritmos de aprendizagem em outro tutorial)

perceptron = Neuron(n_inputs = 3, bias = -0.1, weights = )perceptron()
Observe que ao ajustar os valores dos pesos e bias, você pode ajustar o neurônio decisão da fronteira. (NB: um neurônio aprende atualizando seus pesos e valores de viés para reduzir o erro de suas decisões).

so why do we need so many neurons in an ANN if any one will suffer (as a classifier)?

Limitações: O neurônio é um classificador binário, pois só podemos aprender a distinguir entre duas classes (exemplo: azul e vermelho) máx. O neurônio é um classificador linear, pois a decisão de limite se aproxima de uma linha reta para os dados 2D (ou uma superfície plana para dados 3D, etc)

Infelizmente, neurônios individuais só são capazes de classificar linearmente separáveis de dados.

no Entanto, através da combinação de neurônios juntos, nós essencialmente combinar a sua decisão limites. Portanto, uma ANN composta por muitos neurônios é capaz de aprender limites de decisão complexos e não lineares.

a Combinação de Neurônios permite que Redes Neurais para saber mais complexos, não lineares Decisão Fronteiras

os Neurónios estão conectados entre si de acordo com uma rede específica de arquitetura. Embora haja arquiteturas diferentes, quase todas contêm camadas. (NB:: Neurônios da mesma camada não se conectar com o outro)

Redes Neurais conter Camadas

normalmente Há uma camada de entrada (contendo um número de neurônios igual ao número de recursos de entrada de dados), uma camada de saída (contendo um número de neurônios igual ao número de classes), e uma camada oculta (contendo qualquer número de neurônios).

Profundo redes neurais conter várias camadas ocultas

pode haver mais de uma camada oculta para permitir que a rede neural para aprender mais complexo decisão limites (Qualquer rede neural com mais de uma camada oculta é considerado um profundo rede neural).

vamos construir um NN profundo para pintar esta imagem:

Um exemplo de imagem que a ANN vai aprender a pintar (Ele vai aprender a associar certas cores para determinadas regiões da imagem)

Permite fazer o download da imagem e carregar seus pixels em uma matriz

!curl -O https://pmcvariety.files.wordpress.com/2018/04/twitter-logo.jpg?w=100&h=100&crop=1from PIL import Image
image = Image.open('twitter-logo.jpg?w=100')import numpy as np
image_array = np.asarray(image)

Agora, o ensino a ANN para pintar é um aprendizado supervisionado, de tarefas, de modo que precisamos para criar um rotulados conjunto de treinamento (Nossos dados de treinamento terá entradas e a saída esperada etiquetas para cada entrada). As entradas de treinamento terão 2 valores (as coordenadas X, y de cada pixel).

dada a simplicidade da imagem, poderíamos realmente abordar este problema de uma de duas maneiras. Um problema de classificação (onde a rede neural prevê se um pixel pertence à classe “azul” ou à classe “cinza”, dadas as suas coordenadas xy) ou um problema de regressão (onde a rede neural prevê valores RGB para um pixel dadas as suas coordenadas).

se tratar isto como um problema de regressão: as saídas de formação terão 3 valores (os valores normalizados r,g,b para cada pixel). – Vamos usar este método por agora.

training_inputs,training_outputs = ,
for row,rgbs in enumerate(image_array):
for column,rgb in enumerate(rgbs):
training_inputs.append((row,column))
r,g,b = rgb
training_outputs.append((r/255,g/255,b/255))

Agora vamos criar o nosso ANN:

totalmente ligado feed-forward de rede neural (FFNN) — também conhecido como Um multicamadas perceptron (MLP)
  • Ele deve ter 2 neurônios na camada de entrada (uma vez que existem 2 valores entrem em: x & y coordenadas).
  • deve ter 3 neurônios na camada de saída (uma vez que existem 3 valores para aprender: r, g, b).
  • O número de camadas ocultas e o número de neurônios em cada camada oculta são dois hiperparâmetros a experiência (bem como o número de épocas de treinamento para ele, a função de ativação, etc) — eu vou usar a 10 camadas ocultas com 100 neurônios em cada camada oculta (tornando este um profundo rede neural)
from sklearn.neural_network import MLPRegressorann = MLPRegressor(hidden_layer_sizes= tuple(100 for _ in range(10)))ann.fit(training_inputs, training_outputs)

A rede treinada que agora podem prever normalizado valores rgb para qualquer coordenadas (e.g. x,y = 1,1).

ann.predict(])

array(])

permite usar a ANN para prever os valores de rgb para cada coordenada e permite exibir a previsão de valores rgb da imagem inteira para ver o quão bem ele fez (qualitativamente — vamos deixar avaliação de métricas para outro tutorial)

predicted_outputs = ann.predict(training_inputs)predicted_image_array = np.zeros_like(image_array)
i = 0
for row,rgbs in enumerate(predicted_image_array):
for column in range(len(rgbs)):
r,g,b = predicted_outputs
predicted_image_array =
i += 1
Image.fromarray(predicted_image_array)
Nossa ANN Pintura (previsto pixel cores)

Tente alterar os hiperparâmetros para obter melhores resultados.

Se, em vez de tratar isso como um problema de regressão, podemos tratar isso como uma classificação problema e, em seguida, a formação de saídas de ter 2 valores (a probabilidade do pixel pertencer a cada uma das duas classes: “azul” e “cinza”)

training_inputs,training_outputs = ,
for row,rgbs in enumerate(image_array):
for column,rgb in enumerate(rgbs):
training_inputs.append((row,column))
if sum(rgb) <= 600:
label = (0,1) #blue class
else:
label = (1,0) #grey class
training_outputs.append(label)

podemos reconstruir a nossa ANN como um classificador binário com 2 neurônios na camada de entrada, 2 neurônios na camada de saída e 100 neurônios na camada oculta (com 10 camadas ocultas)

from sklearn.neural_network import MLPClassifier
ann = MLPClassifier(hidden_layer_sizes= tuple(100 for _ in range(10)))
ann.fit(training_inputs, training_outputs)

agora podemos usar os treinados ANN para prever a classe a qual cada pixel pertence (0: “cinza” ou 1: “azul”). The argmax function is used to find which class has the highest probability

np.argmax(ann.predict(]))

(this indicates the pixel with xy-coordinates 1,1 is most likely from class 0: “grey”)

predicted_outputs = ann.predict(training_inputs)predicted_image_array = np.zeros_like(image_array)
i = 0
for row,rgbs in enumerate(predicted_image_array):
for column in range(len(rgbs)):
prediction = np.argmax(predicted_outputs)
if prediction == 0:
predicted_image_array =
else:
predicted_image_array =
i += 1
Image.fromarray(predicted_image_array)
The predicted class for each pixel
The expected class for each pixel

Deixe uma resposta

O seu endereço de email não será publicado.