He intentado implementar una CNN desde cero en Java. No estoy usando ninguna biblioteca externa que dificulte las cosas.
Mi CNN tiene la siguiente estructura: Input -> [ConvLayer, Pool, ReLU, FullyConnected] -> Output
Estas capas se pueden agregar una detrás de la otra en casi cualquier orden. Todas las capas funcionan excepto ConvLayer. El pase hacia adelante está bien, pero estoy atascado con el pase hacia atrás del error y la actualización de los pesos.
Sé que es una especie de convolución hacia atrás con núcleos invertidos o algo así, pero simplemente no puedo hacer que esto funcione y sería genial si alguien pudiera explicar brevemente qué valores deben multiplicarse con qué valores :)
Mi intento se puede encontrar aquí: CNN Convolution Layer - Problemas de retropropagación
Estoy feliz por cualquier tipo de ayuda.
saludos finn
Cuando hacemos un paso hacia atrás para una capa específica, necesitamos
El hecho es que la actualización de pesos en la capa convolucional es muy similar a las cosas que haces en la capa totalmente conectada. Si tiene su pérdida L calculada en una capa completamente conectada, entonces puede calcular la pérdida de la capa convolucional por parte de L con respecto a y , donde y es la salida de la capa convolucional en su caso. Luego, la computación de gradientes será la misma que para una capa completamente conectada.
Si desea una descripción más matemática, consulte Backpropagation .
Espero que esto te ayudará.