Рубрики
Без рубрики

Entendendo Redes Convolucionais (CNNS)

O Reconhecimento de Image ém um clássico flowera de classificação, e redes neurais convolucionais … Теги с обучением машины, керами, питоном, глубоким обучением.

O Reconhecimento de Image ém um clássico flowera de classificatação, e redes neurais convolucionaissusmoum Em Histórico de Alta Acurácia Para Essea. Allyira Applicação Com Sucesso de Uma Cnn Foi Desenvolvida Por Yann lecun em 1998 Com Sete Camadas Entre Convoluções e полностью подключен. Desde Então As Cnns Ficaram Cada Vez Mais Profundas e Compartyas, Como Alexnet EM 2012, Que, Apesar de Ter Apenas Oito Camadas (Cinco Convoluções E TREê полностью подключен), Apresenta Sessenta Milhões de Parâmetros, EA Googlenet Com Vinte E Duas Camadas E Quatro Milhões de parâmetros.

Arquitutura da rede lenet5

Antes de entender como funciona UMA Rede Convolucial, é Interestante Conhecer Qual Foi A Inspiração Biológica Para Essa Arquitetura. EM 1962, Hubel E Wiesel Fiveram UM Experientio Mostrando Que Alguns Neuronios São Ativados Juntos Quanto Expostos A algumas Linhas ou Curvas, Conseguindo Assim Produzir o Reconhecimento Visual.

Essa E A Patace A Passente Ideia Price De UMA Rede Convolucial: Filtrar Linhas, Curvas e Bordas E EM CADA CAMADA ACRESCIDA TRASSICAR ESSA FILTRAGEM EMMA IMAME MAIS COMPORECHA. Вамос entender mais detalhadamente nos próximos tópicos.

QUANDO FALAMOS EM Reconhecimento/Classificationação de Imagens, как INTRADAS SãOO USAUSUMENTE Matrizes Tridimensionais Com Altura E Largura (DE ACORDO COM AS HEROMõES DA IMEDEM) E Profundidade, Drindinada Pela Countidade de Canais de Canes. Е.М. Герал Images Images Utilizam Três Canais, RGB, COM OS Valores de Cada Pixel.

Как Convoluções Funcionam Como Filtros Que Enxergam Pequenos Quadrados E Vão «Escorregando» POR TODA Imageam Captando OS Traços Mais Marcantes. Explando melhor, com uma imagem 32x32x3 E UM Filtro Que Cobre UMA área de 5×5 da Imagem com movimento de 2 Saltos (Шамадо-де-Шайд) o Filtro Passará Pela Imagem Inteira, POR CADA UM DOS CANAIS, FORMANDO NO FINAL UM Функция Map OU Activation Map de 28x28x1.

Entrada de 28×28 Macheres Com Repeptive Field de área 5×5.

Profundidade Da Saída de Uma Convolução éngual a quique a quantidade de filtros ApplicaDos. Quanto Mais Profundas São As Camadas Das Convoluções, Mais Detalhados São OS Traços Идентификационная карта активации Com o.

O Filtro, que também é conhecido por kernel, é formado por Pesos iniaclicizados Aleatorirece, Atualizando Os Cada Nova Entrada Durante O Processo de Backpropagation. Pequena Região Da Entrada Onde O Filtro é Alppleado Э-Шамада децептивное поле.

PARA Exemplififar, Aqui Temos UM Filtro Que представление Curva Ao Seu Lado.

Na Image A Abaixo Está destacado o Восходящее поле без качества Será Multiplicado Pelo Filtro Acima.

COM Essa Combinação Temo Como Resuldado UM Número Alto, Andando UMA Compatibilidade entre entre engha. QUANDO A Image NãO TOUSUI Nenhuma Compatibilidade Esse Resuldado Chega Mais Próximo нулевой.

ALÉM DO TAMANHO DO FILTRO E O SLIDE DA CONVOLUSOMAO COMO HIPERPARMAMETRO, QUEM ESTA MODELERANDO UMA CNN TAMPÉM TEM QUE ESCOLHER COMO SERA CORA O PADDING. O Поступление PODE SER NENHUM, без качества O Выход a on convolução ficará no seu tamanho Оригинал, ou jall pad, onde uma borda é adicionada e preenchida com 0’s. O Обслуживать PARA Que As Camadas Não Dimnuam Muito Mais Rápido Do Que É Thansário Para o Artrendizado.

Exemplo de Uma Convolução de Filtro 3×3 E Shamide 1 Com A Entrada Utilizando Zero Pad.

Как Funções de Ativação Servem Para Trazer Não-Linearidades Ao Sistema, Para Que A Rede Consiga Armender Qualkquer Tipo de Funcionialidade. Há muitas funções, como сигмоид , Тан е Softmax , Mas Mais INDICADA PARA REDES CONVOLUCIONISIS E A RELU POR SER MAIS EFICESIONE Computionalmente SEM Grandes Diferenças de Acurácia Quando Foralada Arrass Funções. Essa Função Zera Todos OS Валорам Negativos Da Saída da Camada Ansiory.

UMA CAMADA DE POWERSION Обслуживание PARA SIMPLIFITHER A Informação Da Camada Anterior. Assim Como Na Convolução, é escolhida UMA Unidade de área, POR Exemplo 2×2, Para Transitar POR TODA A A A A A A A A A A Anderiory Saída da Camada. Unidade Emave Actedável Por Resumir In Informação Daquela área Em Um único Valor. SE SAIDA DA CAMADA ANTERIORDER для 24×24, Saída объединяет Será 12×12. Além Disso, É Preciso Escolher Como Será Feita A Sumarização. O Método Mais Utilizado É O Maxpooling, ни одного качества apenas o maior número da Unidade é passado para saída. Essa Sumarização de Dados подают PARA Diminuir A Quantidade de Pesos a queendade de pesos a serme aperendidos e também para evitar.

Maxpooling com 2×2 de área

AO Final Da Rede É Colocada UMA CAMADA Полностью подключена, Onde Sua Entrada É A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A CAMADA DA CAMADA Emeriory E Sua Saída São N Neuronios, COM N SENDO A Quantidade de Classes Do Seu Modelo Para Finalizar A Carsificação.

Abaixo Apresento UM Código Smple de Exemplo Para A A Construção dum Modelo Usando CNNS. Нет Código Utilizo O Tensorflow , UM Framework De Machine обучение, COM O Керас UMA API De Alto Nível Para Redes Neurais. Neste Exemplo Uso O CORVUNTO DE DADOS CIFAR-10 COM 60 000 IMAINAL DE 32X32 MACHERSõES E 32×32 CHARMESõ

import matplotlib.pyplot as plt  
import numpy as np  
import tensorflow as tf  
from keras.models import Sequential  
from keras.layers import Dense  
from keras.layers import Flatten  
from keras.layers import Dropout  
from keras.optimizers import SGD  
from keras.layers.convolutional import Conv2D  
from keras.layers.convolutional import MaxPooling2D  
from keras.utils import np_utils  
from keras.datasets import cifar10batch_size = 32   
n_classes = 10   
epochs = 40(x_train, y_train), (x_test, y_test) = cifar10.load_data()height = x_train.shape[1]  
width = x_train.shape[2]# Validation dataset splitting  
x_val = x_train[:5000,:,:,:]  
y_val = y_train[:5000]  
x_train = x_train[5000:,:,:,:]  
y_train = y_train[5000:]print('Training dataset: ', x_train.shape, y_train.shape)  
print('Validation dataset: ', x_val.shape, y_val.shape)  
print('Test dataset: ', x_test.shape, y_test.shape)

Training dataset: (45000, 32, 32, 3) (45000, 1)  
Validation dataset: (5000, 32, 32, 3) (5000, 1)  
Test dataset: (10000, 32, 32, 3) (10000, 1)
cols=2  
fig = plt.figure()  
print('training:')  
for i in range(5):  
    a = fig.add_subplot(cols, np.ceil(n_classes/float(cols)), i + 1)  
    img_num = np.random.randint(x_train.shape[0])  
    image = x_train[i]  
    id = y_train[i]  
    plt.imshow(image)  
    a.set_title(label_names[id[0]])  
fig.set_size_inches(8,8)  
plt.show()fig = plt.figure()  
print('validation:')  
for i in range(5):  
    a = fig.add_subplot(cols, np.ceil(n_classes/float(cols)), i + 1)  
    img_num = np.random.randint(x_train.shape[0])  
    image = x_val[i]  
    id = y_val[i]  
    plt.imshow(image)  
    a.set_title(label_names[id[0]])  
fig.set_size_inches(8,8)  
plt.show()fig = plt.figure()  
print('test:')  
for i in range(5):  
    a = fig.add_subplot(cols, np.ceil(n_classes/float(cols)), i + 1)  
    img_num = np.random.randint(x_train.shape[0])  
    image = x_test[i]  
    id = y_test[i]  
    plt.imshow(image)  
    a.set_title(label_names[id[0]])  
fig.set_size_inches(8,8)  
plt.show()
y_train = np_utils.to_categorical(y_train, n_classes)  
y_val = np_utils.to_categorical(y_val, n_classes)  
y_test = np_utils.to_categorical(y_test, n_classes)# Datasets pre-processing  
x_train = x_train.astype('float32')  
x_val = x_val.astype('float32')  
x_test = x_test.astype('float32')  
x_train /= 255  
x_val /= 255  
x_test /= 255

ESTE Modelo Conta Com Cinco Camadas de Convoluções E Duas Camadas de Rede полностью подключен. O Отимизадор Utilizado é o Стохастический градиентный спуск (SGD) COM Оценка обучения de 0,01.

def create_model():  
  model = Sequential()  
  model.add(Conv2D(filters=128, kernel_size=(3, 3), input_shape=(height, width, 3), strides=1, padding='same', activation='relu'))  
  model.add(MaxPooling2D(pool_size=(2,2)))  
  model.add(Conv2D(filters=128, kernel_size=(3, 3), strides=1, activation='relu'))  
  model.add(MaxPooling2D(pool_size=(2,2)))  
  model.add(Dropout(0.25))  
  model.add(Conv2D(filters=64, kernel_size=(2, 2), strides=1, activation='relu'))  
  model.add(MaxPooling2D(pool_size=(1,1)))  
  model.add(Conv2D(filters=32, kernel_size=(2, 2), strides=1, activation='relu'))  
  model.add(MaxPooling2D(pool_size=(1,1)))  
  model.add(Conv2D(filters=32, kernel_size=(2, 2), strides=1, activation='relu'))  
  model.add(MaxPooling2D(pool_size=(1,1)))  
  model.add(Dropout(0.25))  
  model.add(Flatten())  
  model.add(Dense(64, activation='relu'))  
  model.add(Dense(n_classes, activation='softmax'))  
  return modeldef optimizer():  
    return SGD(lr=1e-2)model = create_model()  
model.compile(optimizer=optimizer(),  
              loss='categorical_crossentropy',  
              metrics=['accuracy']  
              )  
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_val,y_val),verbose=1)  
model.summary()

O Comando Summary () Mostra Algumas Informações Sobre, когда Camadas Do Seu Modelo. Podemos ver Para Camada E OS Parâmetros Artrendidos EM CADA ETAPA.

scores = model.evaluate(x_test, y_test, verbose=0)  
print("Accuracy: %.2f%%" % (scores[1]*100), "| Loss: %.5f" % (scores[0]))

Como Resuldado Desse Modelo Temos: ** Точность: 75,24% | Потеря: 0,71711 * * Apesar Da Acurácia Desse Modelo Nesse DataSet Ser de apenas 75%, COM CNNS Mais Comportas A Acurácia Atingida No Cifar-10 Chegar A 95%. Esse ссылка MOSTRA AS REDES QUE CONTIVERAM RESSULTADOS COM AS MAIS ALTAS ACURACIAS EM CIMA DO CIFAR-10.

DEIXO AQUI ALGUNS LINKES DE REELêNCIAS USADOS POR MIM PARA ESCREVER ESTE ARTIGO, DE ONDE TAMPÉM PEGUEI ALGUMAS IMAGES. Recomendo Leitura de Todos (;

– Stanford CS Class CS231N: Революционные нейронные сети для визуального распознавания: http://cs231n.github.io/ – Руководство для понимания сверточных нейронных сетей: https://adeshpande3.github.io/adeshpande3.github.io/a-beginner%27s-guide-to-underStanding-convolutional-neural-Networks/ – нейронные сети и глубокая книга обучения: http://neurnnetworksanddeeplearning.com/chap6.html – Машина обучения Guru Blog: http://machinelearninguru.com/computer_vision/basics/convolution/convolution_layer.html.

Оригинал: “https://dev.to/giselyalves13/entendendo-redes-convolucionais-cnns-42h9”