Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Buenas a todos.
Actualmente estoy trabajando en la implementación de una red neuronal para controlar un robot con una FPGA.
Al implementar el diseño lógico de la neurona tengo un problema:
La neurona recibe unas entradas "X" con buses de 8 bits. Esas entradas tienen que multiplicarse por otro número de 8 bits "Weight". El problema que tengo es que al multiplicar los dos número de 8 bits sale un número de 16bits. Después de unas operaciones más, el número que sale por la neurona es de 16 bits y ese tiene que ir conectado a otra neurona con entrada de 8 bits.
No se si me he explicado bien, pero necesito hacer una multiplicación de numeros de 8 bits y que la salida tambien sea de 8 bits. Ya que sino, en cada capa de neuronas los buses se multiplicarian por dos.
Saludos y gracias por la ayuda,
Ionthas.
Si que llevan multiplcadores, pero mi idea es hacer que cada neurona tenga su propio multiplicador.
Voy a provar de hacer el truncado que me ha propuesto ragnarok.
O tienes que ir muy deprisa o es una forma bastate burda de gastar espacio en la FPGA (que precisamente no es barato)...
Yo, si tu caso es que no tienes que ir a 'tiempo real', sino que puedes explayarte unos ms pues implementaría un único multiplicador de 16 o 32 bits y haría todas las multiplicaciones allí (mejor que multiplicador un convolucionador*).
S2
Ranganok Schahzaman
* convolucionador = multiplica y suma el resultado al acumulador.
La verdad es que al final lo acabaré haciendo así seguramente. Lo que quería, era tener la potencia de cálculo repartida por igual en todas las neuronas para hacerlo mas parecido a un cerebro humano. (Aunque no es óptimo en espacio).
Con las capacidades de una FPGA y un buen aprovechamiento de su RAM interna, se puede hacer un 'secuenciador' que ejecute todos los pasos de todas las neuronas en unos pocos ciclos por neurona, usando un solo multiplicador. Incluso, dado que algunas llevan varios multiplicadores internos, puedes usar varios de ellos para hacer coma flotante. A 100MHz y un sólo ciclo para hacer el MAC, puedes secuenciar varios cientos de 'neuronas' por milisegundo.