
O conhecimento do aprendizado de máquina e a biblioteca TensorFlow é semelhante às primeiras lições de uma escola de condução, quando você sofre de estacionamento paralelo, tenta mudar de marcha no momento certo e não mistura os espelhos, lembrando freneticamente a sequência de ações, enquanto seu pé treme nervosamente nos pedais de aceleração. Este é um exercício difícil, mas necessário. Assim, no aprendizado de máquina: antes de usar sistemas modernos de reconhecimento de face ou algoritmos de previsão no mercado de ações, você terá que lidar com as ferramentas apropriadas e um conjunto de instruções para criar seus próprios sistemas sem problemas.
Os iniciantes no aprendizado de máquina apreciarão a orientação aplicada deste livro, porque seu objetivo é apresentar o básico e, em seguida, resolver rapidamente os problemas reais. A partir de uma revisão dos conceitos e princípios de aprendizado de máquina do trabalho com o TensorFlow, você passará para algoritmos básicos, estudará redes neurais e poderá resolver independentemente os problemas de classificação, agrupamento, regressão e previsão.
Trecho. Redes neurais convolucionais
Fazer compras nas lojas após um dia cansativo é uma tarefa muito onerosa. Meus olhos são atacados por muita informação. Vendas, cupons, uma variedade de cores, crianças pequenas, luzes tremeluzentes e corredores cheios de pessoas - esses são apenas alguns exemplos de todos os sinais enviados ao córtex visual do cérebro, independentemente de eu querer ou não prestar atenção a ele. O sistema visual absorve uma abundância de informações.
Certamente você conhece a frase "é melhor ver uma vez do que ouvir cem vezes". Isso pode ser verdade para você e para mim (ou seja, para as pessoas), mas a máquina pode encontrar significado nas imagens? Nossos fotorreceptores visuais selecionam comprimentos de onda da luz, mas essas informações, aparentemente, não se estendem à nossa consciência. No final, não sei dizer exatamente quais comprimentos de onda da luz estou observando. Da mesma forma, a câmera recebe pixels da imagem. Mas, em vez disso, queremos receber algo de nível superior, por exemplo, nomes ou posições de objetos. Como obtemos informações percebidas em nível humano a partir de pixels?
Para obter um certo significado dos dados de origem, será necessário projetar um modelo de rede neural. Nos capítulos anteriores, vários tipos de modelos de redes neurais foram introduzidos, como modelos totalmente conectados (capítulo 8) e codificadores automáticos (capítulo 7). Neste capítulo, apresentaremos outro tipo de modelo chamado rede neural convolucional (CNN). Este modelo funciona muito bem com imagens e outros dados sensoriais, como som. Por exemplo, o modelo CNN pode classificar com segurança qual objeto é exibido na imagem.
O modelo da CNN, que será discutido neste capítulo, será treinado para classificar imagens em uma das 10 categorias possíveis. Nesse caso, "uma imagem é melhor do que apenas uma palavra", pois temos apenas 10 opções possíveis. Este é um pequeno passo em direção à percepção no nível humano, mas temos que começar com algo, certo?
9.1 Desvantagens das redes neurais
O aprendizado de máquina é uma eterna luta pelo desenvolvimento de um modelo que tenha expressividade suficiente para apresentar dados, mas, ao mesmo tempo, não seja tão universal que se refira aos padrões de reciclagem e memorização. As redes neurais são oferecidas como uma maneira de aumentar a expressividade; embora, como você possa imaginar, eles sofram muito com as armadilhas da reciclagem.
OBSERVAÇÃO O novo treinamento ocorre quando um modelo treinado é excepcionalmente preciso em um conjunto de dados de treinamento e incorreto em um conjunto de dados de validação. Esse modelo é provavelmente universal demais para a pequena quantidade de dados disponíveis e, no final, apenas lembra os dados de treinamento.
Para comparar a versatilidade dos dois modelos de aprendizado de máquina, você pode usar um algoritmo heurístico rápido e bruto para calcular o número de parâmetros que precisam ser determinados como resultado do treinamento. Como mostrado na fig. 9.1, uma rede neural totalmente conectada que obtém uma imagem de 256 × 256 e a mapeia em uma camada de 10 neurônios terá 256 × 256 × 10 = 655.360 parâmetros! Compare-o com um modelo que contém apenas cinco parâmetros. Pode-se supor que uma rede neural totalmente conectada possa apresentar dados mais complexos que um modelo de cinco parâmetros.
A próxima seção discute redes neurais convolucionais, que são uma maneira razoável de reduzir o número de parâmetros. Em vez de lidar com redes totalmente conectadas, a CNN reutiliza os mesmos parâmetros repetidamente.
9.2 Redes neurais convolucionais
A principal idéia subjacente às redes neurais convolucionais é que a compreensão local da imagem é suficiente. A vantagem prática das redes neurais convolucionais é que, com vários parâmetros, é possível reduzir significativamente o tempo de treinamento, bem como a quantidade de dados necessários para treinar o modelo.
Em vez de redes totalmente conectadas com pesos de cada pixel, a CNN possui um número suficiente de pesos necessários para visualizar um pequeno fragmento da imagem. É como ler um livro com uma lupa: no final, você lê a página inteira, mas, a qualquer momento, olha apenas para um pequeno fragmento.
Imagine uma imagem de 256 × 256. Em vez de usar o código TensorFlow que processa a imagem inteira de uma só vez, você pode digitalizar o fragmento da imagem por fragmento, por exemplo, uma janela 5 × 5. Uma janela 5 × 5 desliza sobre a imagem (geralmente da esquerda para a direita e de cima para baixo), como mostrado na fig. 9.2 A rapidez com que desliza é chamada de comprimento da passada. Por exemplo, um comprimento de etapa 2 significa que uma janela deslizante 5 × 5 move 2 pixels por vez até que toda a imagem tenha passado. No TensorFlow, como será mostrado em breve, você pode ajustar o comprimento da etapa e o tamanho da janela usando a biblioteca de funções incorporada.
Essa janela 5 × 5 possui uma matriz de peso 5 × 5 associada a ela.
DEFINIÇÃO Uma convolução é um somatório ponderado dos valores de intensidade de pixels em uma imagem à medida que a janela passa por toda a imagem. Acontece que esse processo de convolução da imagem com a matriz de pesos cria outra imagem (do mesmo tamanho, que depende da dobra). Coagulação é o processo de aplicação da convolução.
Todas as manipulações da janela deslizante ocorrem na camada convolucional da rede neural. Uma rede neural convolucional típica tem várias camadas convolucionais. Cada camada convolucional geralmente cria muitas convoluções adicionais; portanto, a matriz de ponderação é um tensor 5 × 5 × n, onde n é o número de convoluções.
Como exemplo, deixe a imagem passar por uma camada convolucional com uma matriz de peso de dimensões 5 × 5 × 64. Isso cria 64 convoluções com uma janela deslizante 5 × 5. Portanto, o modelo correspondente possui 5 × 5 × 64 = 1600 parâmetros, o que é significativamente menor que o número de parâmetros de uma rede totalmente conectada : 256 × 256 = 65.536.
A atratividade das redes neurais convolucionais (CNNs) é que o número de parâmetros usados pelo modelo não depende do tamanho da imagem original. Você pode executar a mesma rede neural convolucional em imagens 300 × 300, e o número de parâmetros na camada convolucional não será alterado!
9.3 Preparação da imagem
Antes de começar a usar o modelo CNN com o TensorFlow, prepare algumas imagens. As listagens nesta seção ajudarão você a configurar um conjunto de dados de treinamento para o restante do capítulo.
Primeiro, faça o download do
conjunto de
dados CIFAR-10 em
www.cs.toronto.edu/~kriz/cifar-10- python.tar.gz. Este conjunto contém 60.000 imagens distribuídas uniformemente em 10 categorias, o que é um recurso bastante grande para tarefas de classificação. Em seguida, o arquivo de imagem deve ser colocado no diretório de trabalho. Na fig. A Figura 9.3 mostra exemplos de imagens desse conjunto de dados.
Nós já usamos o conjunto de dados CIFAR-10 no capítulo anterior sobre codificadores automáticos e agora analisamos esse código novamente. A lista a seguir é retirada diretamente da documentação do CIFAR-10, localizada em
www.cs.toronto.edu/~kriz/cifar.html . Coloque o código no arquivo cifar_tools.py.
Listagem 9.1. Carregando imagens de um arquivo CIFAR-10 em Python
import pickle def unpickle(file): fo = open(file, 'rb') dict = pickle.load(fo, encoding='latin1') fo.close() return dict
As redes neurais são propensas a reciclagem, por isso é importante fazer todo o possível para minimizar esse erro. Para fazer isso, não se esqueça de limpar os dados antes de processá-los.
A limpeza de dados é o principal processo do pipeline de aprendizado de máquina. O código na Listagem 9.2 usa as três etapas a seguir para limpar um conjunto de imagens:
1. Se você tiver uma imagem em cores, tente convertê-la em tons de cinza para reduzir a dimensionalidade dos dados de entrada e, portanto, reduzir o número de parâmetros.
2. Pense em cortar a imagem no centro, porque as bordas da imagem não fornecem nenhuma informação útil.
3. Normalize a entrada subtraindo a média e dividindo pelo desvio padrão de cada amostra de dados, para que os gradientes não mudem muito acentuadamente durante a propagação de retorno.
A lista a seguir mostra como limpar um conjunto de dados usando esses métodos.
Salve todas as imagens do conjunto de dados CIFAR-10 e execute a função de limpeza. A listagem a seguir define um método conveniente para ler, limpar e estruturar dados para uso no TensorFlow. Lá, você deve incluir o código do arquivo cifar_tools.py.
Listagem 9.3. Pré-processamento de todos os arquivos CIFAR-10
def read_data(directory): names = unpickle('{}/batches.meta'.format(directory))['label_names'] print('names', names) data, labels = [], [] for i in range(1, 6): filename = '{}/data_batch_{}'.format(directory, i) batch_data = unpickle(filename) if len(data) > 0: data = np.vstack((data, batch_data['data'])) labels = np.hstack((labels, batch_data['labels'])) else: data = batch_data['data'] labels = batch_data['labels'] print(np.shape(data), np.shape(labels)) data = clean(data) data = data.astype(np.float32) return names, data, labels
No arquivo using_cifar.py, você pode usar o método importando cifar_tools para isso. As listas 9.4 e 9.5 mostram como buscar várias imagens de um conjunto de dados e visualizá-las.
Listagem 9.4. Usando a função auxiliar cifar_tools
import cifar_tools names, data, labels = \ cifar_tools.read_data('your/location/to/cifar-10-batches-py')
Você pode selecionar arbitrariamente várias imagens e desenhá-las de acordo com o rótulo. A lista a seguir faz exatamente isso, para que você possa entender melhor o tipo de dados com o qual estará lidando.
Ao executar esse código, você criará o arquivo cifar_examples.png, que será semelhante à Fig. 9.3
»Mais informações sobre o livro podem ser encontradas no
site do editor»
Conteúdo»
TrechoCupom de desconto de 20% para vendedores ambulantes -
Machine Learning