Función softmax en TensorFlow

Contenido del Bootcamp Dirigido por: | Última modificación: 18 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Saber qué es y cómo funciona una de las alternativas más importantes como lo es la función softmax en TensorFlow se presenta como un requisito de todo buen data scientist que pretenda convertirse en un experto en el mundo del Deep Learning. Si estás interesado, ¡este post es ideal para ti!

En efecto, en el desarrollo de este artículo te expondremos todo lo relacionado con la función softmax en TensorFlow, de manera que la conozcas de forma tanto teórica como práctica para implementarla de manera efectiva.

Función softmax en TensorFlow

La función softmax en TensorFlow se presenta como una alternativa a la función de típica sigmodea de G = sigmoid(). En definitiva, la función softmax en TensorFlow para el procesamiento de los datos implica:

  • Convertir los datos procesados en probabilidades.
  • Que la suma de las probabilidades tenga como resultado un 1.

Por otra parte, la fórmula de la función softmax en TensorFlow es la siguiente:

Ejemplo función softmax en TensorFlow

# Necesitamos también un placeholder para la etiqueta de la imagen, con la que 
# compararemos nuestra predicción
y_true = tf.placeholder(tf.float32, [None, n_output])

# Definimos nuestra función de pérdidas: la entropía cruzada
cross_entropy = -tf.reduce_sum(y_true * tf.log(net_output))

# Comprobamos si nuestra predicción es igual a la etiqueta
idx_prediction = tf.argmax(net_output, 1)
idx_label = tf.argmax(y_true, 1)
correct_prediction = tf.equal(idx_prediction, idx_label)

# Definimos nuestra medida de precisión como el número de aciertos con respecto 
# al número de muestras predichas
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

# Ahora indicamos que queremos minimizar nuestra función de pérdidas (la entropía
# cruzada) usando el algoritmo del descenso del gradiente y con una tasa de 
# aprendizaje = 0.01.
optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
# Ahora lo tenemos todo listo para ejecutar el grafo.

# Esto es necesario para poder escribir continuamente en la misma línea
from IPython.display import clear_output

with tf.Session() as sess:

  sess.run(tf.global_variables_initializer())

  # Ahora entrenamos nuestro regresor
  batch_size = 10  # le introducimos las imágenes de 10 en 10
  for sample_i in range(mnist.train.num_examples):
    sample_x, sample_y = mnist.train.next_batch(batch_size)
    sess.run(optimizer, feed_dict={net_input: sample_x, 
                                   y_true: sample_y})

    # Comprobamos cómo va funcionando nuestro regresor con el conjunto de validación
    if sample_i < 50 or sample_i % 200 == 0:
      val_acc = sess.run(accuracy, feed_dict={net_input: mnist.validation.images,
                                              y_true: mnist.validation.labels})
      print("({}/{}) Acc: {}".format(sample_i, mnist.train.num_examples, val_acc))

  # Cuando ya ha visto todas las muestras del conjunto de entrenamiento, 
  # mostramos la precisión final con el conjunto de test
  print('Teste accuracy: ', sess.run(accuracy, feed_dict={net_input: mnist.test.images,
                                      y_true: mnist.test.labels}))

¡Con esto ya puedes entrenar tu primera RED NEURONAL con TensorFlow!

En este proceso, hemos implementado una regresión logística con la formula y = G(Wx + b), donde G = softmax() ,en vez de la típica G = sigmoid(). Pues bien, si te fijas en la siguiente imagen, en la que se define el perceptrón (una red neuronal de una sola capa) podréis comprobar como output = Activation_function(Wx).

¿Lo ves? ¡Solo falta la bias! ¿Y te has fijado en que en la entrada hay un 1? Por tanto, el peso w0 no se ve multiplicado por nada. En efecto, el peso w0 es la bias, que aparece con esta notación simplemente para poder implementarlo en forma de multiplicación matricial.

En definitiva, lo que acabamos de implementar es un perceptrón con un batch_size = 10, 1 época, gradien descent como optimizador y la función softmax en TensorFlow como función de activación.

Aprende más sobre el Big Data

En el desarrollo de este post, te has podido familiarizar con todo lo relacionado a la función softmax en TensorFlow; sin embargo, debes tener en cuenta que esta es tan solo una de las alternativas que puedes considerar en el procesamiento de los macrodatos por medio de este tipo de framework para el Deep Learning.

Desde KeepCoding, sabemos que instruirte por tu cuenta puede resultar complicado y aburrido, por ello, te presentamos el Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning. Por medio de esta formación íntegra e intensiva, podrás contar con todos los conocimientos necesarios para ser un experto en el ecosistema de sistemas, lenguajes y herramientas del Big Data a la par que los llevas a la práctica guiado por gran un grupo de profesionales. ¡No esperes más para inscribirte!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado