¿Qué tiene de especial la biblioteca Sonnet de DeepMind para construir redes neuronales?

Estás leyendo la publicación: ¿Qué tiene de especial la biblioteca Sonnet de DeepMind para construir redes neuronales?

Sonnet es una biblioteca de Deepmind de código abierto para construir redes neuronales en Tensorflow 2.0. Sonnet tiene muchas similitudes con varias de estas bibliotecas de redes neuronales actuales, pero también tiene características únicas adaptadas a las necesidades de investigación. En este artículo, discutiremos la singularidad que ofrece Sonnet, luego Keras o sklearn e intentaremos aprender sobre Sonnet con una pequeña implementación. Los siguientes son los temas a tratar.

Tabla de contenido

  1. Sobre el soneto
  2. ¿Qué ofrece el soneto?
  3. Implementación de MLP ofrecido por Sonnet

Comprendamos la biblioteca Sonnet que ofrece DeepMind.

Sobre el soneto

DeepMind’s Sonnet es una plataforma basada en Tensorflow para construir redes neuronales. Para la construcción de redes neuronales basadas en un gráfico de cálculo de TensorFlow, el marco proporciona un mayor grado de abstracción.

El Sonnet es un enfoque de programación para crear redes neuronales usando TensorFlow a un alto nivel. Más precisamente, Sonnet le permite crear objetos de Python que representan componentes de redes neuronales, que luego se pueden integrar en un gráfico de TensorFlow.

La noción básica de Sonnet son los módulos. Los módulos de Sonnet contienen elementos de redes neuronales como modelos que se pueden integrar varias veces en un gráfico de flujo de datos. Ese procedimiento abstrae las funciones de TensorFlow de bajo nivel, como la creación de sesiones y el uso compartido de variables. Los módulos se pueden acoplar de cualquier manera y Sonnet permite a los desarrolladores crear sus propios módulos utilizando un enfoque de programación simple.

Las estructuras de programación de alto nivel de Sonnet, la configuración basada en módulos y el aislamiento de la conexión son beneficios innegables. Sin embargo, creo que algunas de las ventajas más significativas de la nueva arquitectura de Deep Learning están ocultas bajo la superficie.

🔥 Recomendado:  Aprenda a crear una estrategia de contenido de redes sociales en 9 pasos simples

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos, echa un vistazo aquí.

¿Qué ofrece el soneto?

  • Aplicaciones de redes multineuronales: Usar TensorFlow para implementar soluciones de redes multineuronales como redes neuronales multicapa o redes neuronales antagónicas es una pesadilla. Las redes neuronales individuales se pueden implementar utilizando el enfoque de programación del módulo de Sonnet, que luego se pueden fusionar para crear redes de nivel superior.
  • Entrenamiento de redes neuronales: Sonnet facilita el entrenamiento de redes neuronales al concentrarse en módulos específicos.
  • Pruebas: El estilo de programación de alto nivel de Sonnet facilita las pruebas automatizadas de redes neuronales utilizando marcos comunes.
  • Extensibilidad: Los desarrolladores pueden simplemente extender Sonnet creando nuevos módulos. Incluso pueden indicar cómo se construye el gráfico de TensorFlow para ese módulo.
  • Componibilidad: Considere tener acceso a un vasto ecosistema de módulos de redes neuronales preconstruidos y entrenados que se pueden combinar dinámicamente para formar redes de nivel superior. Sin duda, Sonnet es un paso en la dirección correcta.

Implementación de MLP ofrecido por Sonnet

MLP significa clasificador de perceptrón multicapa, que está vinculado a una red neuronal por su nombre. Utiliza la red neuronal subyacente. En este artículo, construyamos un clasificador MLP utilizando el módulo Sonnet.

Instalar la biblioteca Sonnet

!pip instalar dm-soneto tqdm

Importe las bibliotecas necesarias.

importar sonnet como snt importar tensorflow como tf importar tensorflow_datasets como tfdf importar matplotlib.pyplot como plt desde tqdm importar tqdm

Para este artículo, utilizaremos el famoso conjunto de datos MNIST de dígitos escritos a mano con un conjunto de 60 000 muestras para entrenamiento y un conjunto de prueba de 10 000 ejemplos. En una imagen de tamaño fijo, los dígitos se normalizaron en tamaño y se centraron.

🔥 Recomendado:  Los 7 mejores software y gestión de PPC para Amazon FBA

tamaño_lote = 200 def proceso_lote(imágenes, etiquetas): imágenes = tf.squeeze(imágenes, eje=[-1]) imágenes = tf.cast(imágenes, dtype=tf.float32) imágenes = ((imágenes / 255.) – .5) * 2. devolver imágenes, etiquetas def mnist(dividir): conjunto de datos = tfdf.load(“mnist” , split=split, as_supervised=True) dataset = dataset.map(process_batch) dataset = dataset.batch(batch_size) dataset = dataset.prefetch(tf.data.experimental.AUTOTUNE) dataset = dataset.cache() return dataset train = mnist(“entrenar”).shuffle(10) prueba = mnist(“prueba”)

Vamos a tener una vista del conjunto de datos de prueba.

imágenes, _ = siguiente (iter (prueba)) plt.imshow (imágenes[1])

Revista de análisis de la India

Construir un clasificador MLP

class sample_MLP(snt.Module): def __init__(self): super(sample_MLP, self).__init__() self.flatten = snt.Flatten() self.hidden1 = snt.Linear(1024, name=”hidden1″) self .hidden2 = snt.Linear(1024, name=”hidden2″) self.logits = snt.Linear(10, name=”logits”) def __call__(self, imágenes): salida = self.flatten(imágenes) salida = tf .nn.relu(self.hidden1(salida)) salida = tf.nn.relu(self.hidden2(salida)) salida = self.logits(salida) volver salida

Aquí usando un módulo lineal de Sonnet que está construido sobre el módulo TensorFlow, que es un contenedor liviano para variables. El módulo lineal creado en la función ‘_int_’ podría llamarse fácilmente usando ‘_call_’ para aplicar las operaciones en el conjunto de datos.

Definición de un modelo base e implementación de los datos.

mlp_testin = muestra_MLP() imágenes, etiquetas = siguiente(iter(prueba)) logits = mlp_testin(imágenes) predicción = tf.argmax(logits[0]).numpy() observado = etiquetas[0].numpy() print(“Valor predicho: {} valor real: {}”.format(predicción, observado)) plt.imshow(imágenes[0])

Revista de análisis de la India

Como se pudo observar, el modelo base no funciona bien con los datos, ya que el valor real es 2 y el valor de predicción es 0. Por lo tanto, es necesario ajustar el modelo.

Afinando el modelo

num_images = 60000 num_epochs = 10 tune_er = snt.optimizers.SGD(learning_rate=0.1) def step(images, labels): “””Realiza un paso optimizador en un solo mini lote.””” con tf.GradientTape() como cinta: logits = mlp_testin(images) loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=labels) loss = tf.reduce_mean(loss) params = mlp_testin.trainable_variables grads = tape.gradient(loss, params) tune_er.apply (graduados, parámetros) pérdida de retorno para imágenes, etiquetas en barra_progreso(tren.repetir(núm_épocas)): pérdida = paso(imágenes, etiquetas) print(“\n\nPérdida final: {}”.format(pérdida.numpy() ))

🔥 Recomendado:  8 nuevas empresas tecnológicas en Shark Tank India S2 que captaron nuestra atención
Revista de análisis de la India

Evaluación del rendimiento del modelo.

total = 0 positive_pred = 0 para imágenes, etiquetas en prueba: predicciones = tf.argmax(mlp_testin(imágenes), eje=1) positive_pred += tf.math.count_nonzero(tf.equal(predicciones, etiquetas)) total += imágenes .forma[0]

print(“Obtuve %d/%d (%.02f%%) predicciones correctas” % (positive_pred, total, positive_pred / total * 100.))

Revista de análisis de la India

Visualiza las predicciones correctas e incorrectas.

para imágenes, etiquetas en prueba: predicciones = tf.argmax(mlp_testin(imágenes), eje=1) eq = tf.equal(predicciones, etiquetas) for i, x in enumerate(eq): if x.numpy() == correcto: etiqueta = etiquetas[i]
predicción = predicciones[i]
imagen = imágenes[i]
hacha[n].imshow(imagen) hacha[n].set_title(“Predicción:{}\nActual:{}”.format(predicción, etiqueta)) n += 1 if n == (filas * columnas): break if n == (filas * columnas): break test_samples( correcto=Verdadero, filas=2, columnas=5)

Revista de análisis de la India

test_samples(correcto=Falso, filas=2, columnas=5)

Revista de análisis de la India

Conclusión

Sonnet ofrece un enfoque de programación sencillo pero potente basado en un módulo de una sola noción. Los módulos pueden incluir referencias a parámetros, otros módulos y procedimientos que procesan la entrada del usuario. Con este artículo práctico, hemos entendido la singularidad que ofrece Sonnet y la implementación de Sonnet para construir un modelo MLP.

Referencias

Tabla de Contenido