O livro "Deep Learning on R"

imagem O aprendizado profundo é um conjunto de algoritmos de aprendizado de máquina que modelam abstrações de alto nível nos dados usando arquiteturas que consistem em muitas transformações não lineares. Concordo, esta frase parece ameaçadora. Mas nem tudo é tão assustador se François Schollay, que criou Keras, a biblioteca mais poderosa para trabalhar com redes neurais, fala sobre aprendizado profundo. Experimente um aprendizado profundo com exemplos práticos de uma ampla variedade de áreas. O livro é dividido em duas partes, a primeira recebe os fundamentos teóricos e a segunda é dedicada à solução de problemas específicos. Isso permitirá que você não apenas entenda o básico da DL, mas também aprenda a usar novas oportunidades na prática. Este livro foi escrito para pessoas com experiência em programação R que desejam se familiarizar rapidamente com o aprendizado profundo na prática e é um arranjo do livro mais vendido de Francois Scholl, "Deep Learning in Python", mas usando exemplos baseados na interface R para Keras.

Sobre este livro


O livro "Deep Learning on R" é dirigido a estatísticos, analistas, engenheiros e estudantes que possuem habilidades de programação em R, mas não possuem conhecimento significativo no campo da máquina e do deep learning. Este livro é uma versão revisada de um livro anterior, Deep Learning in Python , contendo exemplos que usam a interface R para Keras. O objetivo deste livro é fornecer à comunidade R um guia que contém tudo o que você precisa, da teoria básica às aplicações práticas avançadas. Você verá mais de 30 exemplos de código de programa com comentários detalhados, recomendações práticas e explicações generalizadas simples de tudo que você precisa saber para usar o aprendizado profundo na solução de problemas específicos.

Os exemplos usam a estrutura de aprendizado profundo Keras e a biblioteca TensorFlow como um mecanismo interno. Keras é uma das estruturas de aprendizado profundo mais populares e de mais rápido crescimento. Muitas vezes, é recomendada como a ferramenta mais bem-sucedida para iniciantes aprenderem aprendizagem profunda. Depois de ler este livro, você entenderá o que é o aprendizado profundo, para resolver em quais problemas essa tecnologia pode estar envolvida e quais limitações ela possui. Você aprenderá sobre o processo padrão de interpretação e solução de problemas de aprendizado de máquina e como lidar com problemas comuns. Você aprenderá como usar o Keras para resolver problemas práticos, do reconhecimento de padrões ao processamento de linguagem natural: classificação de imagens, previsão de sequência de tempo, análise de emoções e geração de imagens e textos e muito mais.

Trecho. 5.4.1 Visualização de ativação intermediária


A visualização de ativações intermediárias consiste em exibir mapas de recursos que são exibidos por diferentes níveis convolucionais e combinados na rede em resposta a determinados dados de entrada (saída do nível, resultado da função de ativação, geralmente chamada de ativação). Essa técnica permite ver como os dados de entrada são decompostos em vários filtros recebidos pela rede no processo de aprendizado. Normalmente, mapas de recursos com três dimensões são usados ​​para visualização: largura, altura e profundidade (canais de cores). Os canais codificam recursos relativamente independentes; portanto, para visualizar esses mapas de recursos, é preferível criar imagens bidimensionais para cada canal separadamente. Começamos carregando o modelo armazenado na seção 5.2:

> library(keras) > model <- load_model_hdf5("cats_and_dogs_small_2.h5") > model________________________________________________________________ Layer (type) Output Shape Param # ============================================================== conv2d_5 (Conv2D) (None, 148, 148, 32) 896 ________________________________________________________________ maxpooling2d_5 (MaxPooling2D) (None, 74, 74, 32) 0 ________________________________________________________________ conv2d_6 (Conv2D) (None, 72, 72, 64) 18496 ________________________________________________________________ maxpooling2d_6 (MaxPooling2D) (None, 36, 36, 64) 0 ________________________________________________________________ conv2d_7 (Conv2D) (None, 34, 34, 128) 73856 ________________________________________________________________ maxpooling2d_7 (MaxPooling2D) (None, 17, 17, 128) 0 ________________________________________________________________ conv2d_8 (Conv2D) (None, 15, 15, 128) 147584 ________________________________________________________________ maxpooling2d_8 (MaxPooling2D) (None, 7, 7, 128) 0 ________________________________________________________________ flatten_2 (Flatten) (None, 6272) 0 ________________________________________________________________ dropout_1 (Dropout) (None, 6272) 0 ________________________________________________________________ dense_3 (Dense) (None, 512) 3211776 ________________________________________________________________ dense_4 (Dense) (None, 1) 513 ================================================================ Total params: 3,453,121 Trainable params: 3,453,121 Non-trainable params: 0 

Em seguida, selecione uma imagem de entrada de um gato que não faça parte do conjunto de treinamento.

imagem

Listagem 5.25. Teste de exibição de imagem

 plot(as.raster(img_tensor[1,,,])) 

Para extrair mapas de recursos a serem visualizados, crie um modelo Keras que aceite pacotes de imagens e exiba a ativação de todos os níveis convolucionais e combinados. Para fazer isso, usamos a função keras_model da estrutura Keras, que recebe dois argumentos: o tensor de entrada (ou a lista de tensores de entrada) e o tensor de saída (ou a lista de tensores de saída). O resultado será um objeto de modelo Keras semelhante aos modelos retornados pela função keras_sequential_model () com a qual você já está familiarizado; esse modelo mapeia a entrada fornecida para a saída fornecida. Modelos de recursos
Esse tipo é a capacidade de criar modelos com várias saídas (ao contrário de keras_sequential_model ()). A função keras_model é discutida em mais detalhes na seção 7.1.

imagem

imagem

Se você passar uma imagem para este modelo, ele retornará os valores de ativação da camada no modelo original. Este é o primeiro exemplo de modelo com várias saídas neste livro: até agora, todos os modelos apresentados acima têm exatamente uma entrada e uma saída. Em geral, um modelo pode ter qualquer número de entradas e saídas. Em particular, este modelo possui uma entrada e oito saídas: uma para cada ativação de nível.

imagem

Tomemos, por exemplo, a ativação da primeira camada convolucional para a imagem de entrada de um gato:

 > first_layer_activation <- activations[[1]] > dim(first_layer_activation) [1] 1 148 148 32 

Este é um mapa de características de 148 × 148 com 32 canais. Vamos tentar exibir alguns deles. Primeiro, definimos uma função para visualizar o canal.

Listagem 5.28. Função de visualização de canal

 plot_channel <- function(channel) { rotate <- function(x) t(apply(x, 2, rev)) image(rotate(channel), axes = FALSE, asp = 1, col = terrain.colors(12)) } 

Agora, exibiremos o segundo canal de ativação do primeiro nível do modelo original (Fig. 5.18). Este canal parece representar um detector de loop.
Listagem 5.29. Visualização do canal 2

 plot_channel(first_layer_activation[1,,,2]) 

Agora, vamos dar uma olhada no sétimo canal (Fig. 5.19), mas lembre-se de que seus canais podem ser diferentes, porque aprender filtros específicos não é uma operação determinística. Este canal é um pouco diferente e parece que destaca a íris do gato.
Listagem 5.30. Visualização do canal 7

 plot_channel(first_layer_activation[1,,,7]) 

imagem

Agora, vamos criar uma visualização completa de todas as ativações na rede (Listagem 5.31). Para fazer isso, extraia e exiba cada canal nos oito mapas de ativação, colocando os resultados em um tensor maior com imagens (Fig. 5.20–5.23).

Listagem 5.31. Visualização de todos os canais para todas as ativações intermediárias

 image_size <- 58 images_per_row <- 16 for (i in 1:8) { layer_activation <- activations[[i]] layer_name <- model$layers[[i]]$name n_features <- dim(layer_activation)[[4]] n_cols <- n_features %/% images_per_row png(paste0("cat_activations_", i, "_", layer_name, ".png"), width = image_size * images_per_row, height = image_size * n_cols) op <- par(mfrow = c(n_cols, images_per_row), mai = rep_len(0.02, 4)) for (col in 0:(n_cols-1)) { for (row in 0:(images_per_row-1)) { channel_image <- layer_activation[1,,,(col*images_per_row) + row + 1] plot_channel(channel_image) } } par(op) dev.off() } 

imagem

imagem

Aqui estão alguns comentários sobre os resultados.

  • A primeira camada atua como uma coleção de diferentes detectores de loop. Nesta fase, a ativação salva quase todas as informações disponíveis na imagem original.
  • À medida que você sobe nas camadas de ativação, elas se tornam mais abstratas e sua interpretação visual se torna mais complexa. Eles começam a codificar conceitos de alto nível, como "orelha de gato" ou "olho de gato". Representações de alto nível carregam cada vez menos informações sobre a imagem original e mais e mais sobre a classe da imagem.
  • A escassez de ativações aumenta com a profundidade da camada: na primeira camada, todos os filtros são ativados pela imagem original, mas nas camadas subseqüentes há cada vez mais filtros vazios. Isso significa que o padrão correspondente ao filtro não foi encontrado na imagem original.

Acabamos de examinar uma importante característica universal das representações criadas por redes neurais profundas: os recursos extraídos pelas camadas tornam-se mais abstratos com a profundidade da camada. As ativações nas camadas superiores contêm cada vez menos informações sobre uma imagem de entrada específica e mais e mais sobre o destino (nesse caso, a classe de imagem é um gato ou cachorro). Uma rede neural profunda realmente atua como um pipeline de limpeza de informações, que recebe dados brutos (neste caso, imagens no formato RGB) e os transforma repetidamente, filtrando informações desnecessárias (por exemplo, a aparência específica da imagem) e deixando e limpando a correta (por exemplo, uma classe imagens).

Da mesma forma, pessoas e animais percebem o mundo ao seu redor: depois de observar a cena por vários segundos, uma pessoa lembra quais objetos abstratos estão presentes nela (uma bicicleta, uma árvore), mas não se lembra de todos os detalhes da aparência desses objetos. De fato, ao tentar tirar uma bicicleta da memória, é provável que você não consiga obter uma imagem mais ou menos correta, mesmo vendo as bicicletas milhares de vezes (veja exemplos na Fig. 5.24). Tente fazer isso agora e você estará convencido da verdade do que foi dito. Seu cérebro aprendeu a abstrair completamente a imagem visível recebida na entrada e convertê-la em conceitos visuais de alto nível, enquanto filtra detalhes visuais sem importância, dificultando a lembrança deles.

imagem


»Mais informações sobre o livro podem ser encontradas no site do editor
» Conteúdo
» Trecho

Cupom de desconto de 20% para vendedores ambulantes - Deep Learning with R

Source: https://habr.com/ru/post/pt421769/


All Articles