9 / 24 · Conceito
Referência de convolução direta
Para entradas [2,3], pesos [4,−1] e viés um, qual resultado errado ocorre se o viés for somado uma vez por iteração de canal de entrada?
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Prefira uma referência que possa ser inspecionada
Um modelo de referência prioriza um contrato visível em vez de velocidade. Itere canal de saída, linha de saída e coluna de saída; depois, reduza canal de entrada e linha e coluna do kernel. Calcule cada coordenada de entrada e forneça zero fora dos limites. Isso revela a primeira saída incorreta e o termo exato que diverge. O modelo não precisa imitar a ordem otimizada de laços do hardware.
Inicialize o acumulador com b[m] uma vez por saída. Somá-lo dentro da redução repetiria o viés. No modelo inteiro, x e w são códigos centralizados e o viés usa a escala do produto.
Exemplo multicanal resolvido
Use dois canais de entrada 1×1 contendo dois e três. O canal de saída zero tem pesos [4,−1] e viés um, dando 1+8−3=6. O canal de saída um tem pesos [−2,5] e viés −1, dando −1−4+15=10. Um acumulador compartilhado deve iniciar a segunda saída independentemente, em vez de manter o primeiro resultado.
Para a entrada [1,2,3;4,5,6;7,8,9] e o kernel [1,2;3,4], espere [37,47;67,77]. Os primeiros produtos registrados são 1,4,12,20. Os seguintes são 2,6,15,24. Inspecione uma posição calculada manualmente; valores finais sozinhos podem ocultar erros que se compensam.
Compare o modelo direto com um modelo de recortes e produtos escalares estruturado separadamente. Compartilhar a mesma rotina de endereço entre os dois pode compartilhar o mesmo erro. Combine estrutura independente com dados de teste calculados manualmente. Mantenha sementes aleatórias reproduzíveis e preserve um tensor que falhou. Compare tanto o acumulador não convertido quanto o código final de saída para localizar falhas numéricas.
Nosso model.mjs aceita X[C][H][W] e W[M][C/G][R][S], com um lote implícito. Ele verifica tensores retangulares, compatibilidade de canais e grupos. Não importa modelos de frameworks. Use valores distintos, negativos e pesos assimétricos em vez de dados de teste inteiramente nulos. Compare as convenções com Conv do ONNX, documentando os limites deste modelo didático.
Experimente
Para entradas [2,3], pesos [4,−1] e viés um, qual resultado errado ocorre se o viés for somado uma vez por iteração de canal de entrada?
Ler a explicação
O resultado correto é 1+8−3=6. Repetir o viés duas vezes dá 8−3+2=7. Inicialize o viés fora da redução de canais.