tensorflow - matematicas - gradiente geométrico ejercicios
Los gradientes son siempre cero (0)
He escrito un algoritmo usando el marco tensorflow y frente al problema, que tf.train.Optimizer.compute_gradients(loss)
devuelve cero para todos los pesos. Otro problema es si pongo el tamaño del lote más grande que aproximadamente 5, tf.histogram_summary
para pesos arroja un error que algunos de los valores son NaN.
No puedo proporcionar aquí un ejemplo reproducible, porque mi código es bastante voluminoso y no soy tan bueno en TF para hacerlo más corto. Trataré de pegar aquí algunos fragmentos.
Bucle principal:
images_ph = tf.placeholder(tf.float32, shape=some_shape)
labels_ph = tf.placeholder(tf.float32, shape=some_shape)
output = inference(BATCH_SIZE, images_ph)
loss = loss(labels_ph, output)
train_op = train(loss, global_step)
session = tf.Session()
session.run(tf.initialize_all_variables())
for i in xrange(MAX_STEPS):
images, labels = train_dataset.get_batch(BATCH_SIZE, yolo.INPUT_SIZE, yolo.OUTPUT_SIZE)
session.run([loss, train_op], feed_dict={images_ph : images, labels_ph : labels})
Train_op (aquí está el problema):
def train(total_loss)
opt = tf.train.AdamOptimizer()
grads = opt.compute_gradients(total_loss)
# Here gradients are zeros
for grad, var in grads:
if grad is not None:
tf.histogram_summary("gradients/" + var.op.name, grad)
return opt.apply_gradients(grads, global_step=global_step)
Pérdida (la pérdida se calcula correctamente, ya que cambia de muestra a muestra):
def loss(labels, output)
return tf.reduce_mean(tf.squared_difference(labels, output))
Inferencia: un conjunto de capas de convolución con ReLU seguido de 3 capas completamente conectadas con activación sigmoidea en la última capa. Todos los pesos inicializados por rv truncado normal. Todas las etiquetas son vectores de longitud fija con números reales en el rango [0,1]
.
¡Gracias de antemano por cualquier ayuda! Si tiene alguna hipótesis para mi problema, por favor comparta los intentaré. También puedo compartir todo el código si lo desea.