Estou tentando entender melhor as redes neurais convolucionais melhor escrevendo código Python que não depende de bibliotecas (como Convnet ou TensorFlow), e estou ficando preso na literatura sobre como escolher valores para a matriz do kernel, quando realizando uma convolução em uma imagem.
Estou tentando entender os detalhes da implementação na etapa entre os mapas de recursos na imagem abaixo, mostrando as camadas de uma CNN.
De acordo com este diagrama:
O kernel da matriz do kernel "pisa" sobre a imagem, criando um mapa de recursos, em que cada pixel é a soma de todos os produtos entre elementos entre cada peso do kernel (ou matriz de filtro) e o valor de pixel correspondente da imagem de entrada.
Minha pergunta é: como inicializamos os pesos da matriz do kernel (ou filtro)?
Na demonstração acima, eles são simplesmente 1s e 0s, mas presumo que isso seja simplificado por causa do diagrama.
Esses pesos são treinados em alguma etapa de pré-processamento? Ou escolhido explicitamente pelo usuário?
fonte
Não posso comentar por causa da baixa reputação e, portanto, estou escrevendo isso em resposta à pergunta de Felipe Almeida. Após a resposta perfeita da IA independente, não há muito a acrescentar. Se você deseja detectar formas específicas (como um X), pode predefinir um filtro específico, como é o caso da detecção de arestas. Mas essa é a beleza do aprendizado profundo, há tantas camadas, tantos filtros e tantas iterações que os filtros aprendem quase todas as formas de objetos necessárias por si próprias. Então, teoricamente, se houver um X a ser detectado, um dos filtros aprenderá a detectar um X (como o filtro amarelo)
fonte