Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

324
Vistas
¿Cómo establecer aleatoriamente las entradas en cero en keras durante el entrenamiento del codificador automático (devolución de llamada)?

Estoy entrenando 2 codificadores automáticos con 2 rutas de entrada separadas en conjunto y me gustaría establecer aleatoriamente una de las rutas de entrada en cero.

Uso tensorflow con keras backend (API funcional).

Estoy calculando una pérdida conjunta (suma de dos pérdidas) para retropropagación.

A -> A' & B ->B'

pérdida => l2(A,A')+l2(B,B')

Las redes que toman A y B están conectadas en el espacio latente. Me gustaría establecer aleatoriamente A o B en cero y calcular la pérdida solo en la ruta correspondiente, lo que significa que si la ruta de entrada A se establece en cero, la pérdida se calculará solo usando las salidas de la ruta B y viceversa; p.ej:

0 -> A' & B ->B'

pérdida: l2(B,B')

¿Cómo configuro aleatoriamente la ruta de entrada a cero? ¿Cómo escribo una devolución de llamada que hace esto?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Tal vez intente lo siguiente:

 import random def decision(probability): return random.random() < probability

Defina un método que tome una decisión aleatoria basada en una cierta probabilidad x y haga que su cálculo de pérdida dependa de esta decisión.

 if current_epoch == random.choice(epochs): keep_mask = tf.ones_like(A.input, dtype=float32) throw_mask = tf.zeros_like(A.input, dtype=float32) if decision(probability=0.5): total_loss = tf.reduce_sum(reconstruction_loss_a * keep_mask + reconstruction_loss_b * throw_mask) else: total_loss = tf.reduce_sum(reconstruction_loss_a * throw_mask + reconstruction_loss_b * keep_mask) else: total_loss = tf.reduce_sum(reconstruction_loss_a + reconstruction_loss_b)

Supongo que no desea establecer una de las rutas en cero cada vez que actualice los parámetros de su modelo, ya que existe el riesgo de que uno o incluso ambos modelos no estén suficientemente capacitados. También tenga en cuenta que uso la entrada de A para crear tensores zero_like y one_like ya que asumo que ambas entradas tienen la misma forma; si este no es el caso, se puede ajustar fácilmente.

Dependiendo de cuál sea su objetivo, también puede considerar reemplazar su entrada de A o B con un tensor aleatorio, por ejemplo, tf.random.normal basado en una decisión aleatoria. Esto crea ruido en su modelo, lo que puede ser deseable, ya que su modelo se vería obligado a buscar en el espacio latente para intentar reconstruir su entrada original. Esto significa precisamente que aún calcula su pérdida de reconstrucción con A.input y A.output , pero en realidad su modelo nunca recibió A.input , sino el tensor aleatorio.

Tenga en cuenta que esta respuesta sirve como un ejemplo conceptual simple. Puede encontrar un ejemplo de trabajo con Tensorflow aquí .

over 4 years ago · Santiago Trujillo Denunciar

0

Puede establecer una entrada en 0 simplemente:

 A = A*random.choice([0,1])

Este código se puede utilizar dentro de una función de pérdida

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda