Olá, Raphael!
Parece que você está enfrentando um problema de incompatibilidade de dimensões entre os arrays que está tentando operar. O erro "operands could not be broadcast together with shapes" indica que as dimensões dos arrays não estão alinhadas de forma que possam ser operadas juntas.
No seu caso, a função forward_noise() está tentando operar arrays com as formas (3, 28, 28, 3, 1) e (3, 1, 1, 1). Isso sugere que há uma discrepância na forma como os arrays a e b estão sendo usados.
Aqui estão algumas sugestões para resolver o problema:
Verifique as Dimensões: Certifique-se de que as dimensões dos arrays que você está passando para forward_noise() são consistentes. No seu caso, parece que x_treino tem a forma (3, 28, 28, 1) após a expansão do canal, então a e b devem ser reshaped para (3, 1, 1, 1) para que a operação de broadcast funcione corretamente.
Corrija o Reshape: No código da função forward_noise(), ao fazer o reshape de a e b, você pode tentar ajustar para que as dimensões sejam compatíveis. Por exemplo:
a = a.reshape((-1, 1, 1, 1)) # Certifique-se de que isso está correto
b = b.reshape((-1, 1, 1, 1)) # Certifique-se de que isso está correto
Verifique o Código de Geração de Ruído: Certifique-se de que o ruído gerado tem a mesma forma que x. Você pode verificar o shape de cada array antes de operar para garantir que eles sejam compatíveis.
Teste com Diferentes Tamanhos de Lote: Se o problema persistir, tente testar com diferentes tamanhos de lote para ver se o problema é específico para o tamanho atual.
Espero que essas dicas ajudem a resolver o problema que você está enfrentando. Bons estudos!