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
- Sobre el soneto
- ¿Qué ofrece el soneto?
- 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.
¿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.
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])
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])
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() ))
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.))
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)
test_samples(correcto=Falso, filas=2, columnas=5)
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.