Altifigence Academy

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?

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.

y[m,h,w]=b[m]+∑c∑r∑sx[c,hSh−Pt+rDh,wSw−Pl+sDw]w[m,c,r,s]y[m,h,w]=b[m]+\sum_c\sum_r\sum_s x[c,hS_h-P_t+rD_h,wS_w-P_l+sD_w]w[m,c,r,s]

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.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.