¿Cómo se implementa una red neuronal convolucional (CNN) con la estructura de un árbol binario en TensorFlow?

  • Supongo que quiere decir que el número de neuronas disminuye exponencialmente con el orden de la capa.

Ejemplo:

Capa 1: 8 neuronas

Capa 2: 4 neuronas

Capa 3: 2 neuronas

Neurona de capa 4: 1, lo que significa que este es un problema de clasificación binaria (por ejemplo, es el problema de la imagen del perro o del gato)

En tal caso, puede usar una agrupación de 2 para exponencialmente “reducir a la mitad” el número de neuronas .

Código de ejemplo:

# C1 entrada 28 x 28
conv1 = tf.nn.conv2d (data, layer1_weights, [1, 1, 1, 1], padding = ‘SAME’)
sesgo1 = tf.nn.relu (conv1 + layer1_biases)
# S2 entrada 28 x 28
pool2 = tf.nn.avg_pool (sesgo1, [1, 2, 2, 1], [1, 2, 2, 1], relleno = ‘VÁLIDO’)
# C3 entrada 14 x 14
conv3 = tf.nn.conv2d (pool2, layer2_weights, [1, 1, 1, 1], padding = ‘SAME’)
bias3 = tf.nn.relu (conv3 + layer2_biases)
# agregar deserción en la capa oculta #####################################
#keep_prob = tf.placeholder (tf.float32)
bias3dropout = tf.nn.dropout (bias3, 0.5)
################################################## #################
# S4 entrada 14 x 14
pool4 = tf.nn.avg_pool (bias3dropout, [1, 2, 2, 1], [1, 2, 2, 1], relleno = ‘VÁLIDO’)
# F6 entrada 7 x 7
shape = pool4.get_shape (). as_list ()
reshape = tf.reshape (pool4, [forma [0], forma [1] * forma [2] * forma [3]])
hidden = tf.nn.relu (tf.matmul (remodelar, layer3_weights) + layer3_biases)
return tf.matmul (oculto, layer4_weights) + layer4_biases

Como puede ver, disminuye de 28 a 14 a 7, es decir, “mitad” exponencialmente como un árbol binario como usted mencionó. Tenga en cuenta que “[math] tf.nn.avg_pool (bias3dropout, [1, 2, 2, 1], [1, 2, 2, 1], padding = ‘VALID’) [/ math]” realiza la “mitad” operación.

Consulte este github: BerenLuthien / IpythonNotebook_Tensorflow_LeNet5_ConvNetwork

Reconocer : este código es una versión revisada de la solución de “MOOC de aprendizaje profundo Udacity”. Aprendizaje profundo | Udacity

  • Sin embargo, si te refieres exactamente a la topología de un árbol binario , entonces supongo que tal vez quieras usar un filtro de tamaño 2, un paso de 2, sin agrupación (stride = 2 te da la operación “media”, el tamaño-2 filtro exprime dos neuronas en una) , de modo que produce exactamente la topología de un árbol binario . Del mismo modo, el código anterior se puede revisar fácilmente para adaptarse a esta solicitud .

La pregunta: “¿Cómo se implementa una red neuronal convolucional (CNN) con la estructura de un árbol binario en TensorFlow?”

Supongo que mencionó el árbol binario completo (es decir, el árbol binario donde, a excepción de las hojas, otros nodos tienen dos hijos).

Hay una forma bien conocida de representar nodos de árbol binario en una matriz. Suponga que su oración tiene tokens [math] n [/ math]. Sea [math] A [/ math] una matriz de longitud [math] 2 ^ {n-1} [/ math], definida de la siguiente manera:

  • [matemáticas] A_0 [/ matemáticas] es la raíz
  • Para cada [matemática] i [/ matemática], [matemática] A_i [/ ​​matemática] tiene dos hijos, a saber [matemática] A_ {2i + 1} [/ matemática] y [matemática] A_ {2i + 2} [/ matemática ]

Ahora puedes definir el árbol de la siguiente manera

# Código escrito solo para demostrar la idea
# No probado de ninguna manera. Use bajo su propio riesgo

# Ah, puede que ni siquiera tenga una buena sintaxis …

tree_nodes = [Ninguno para _ en xrange ((1 << n) - 1)]
para i en xrange ((1 << n) -1, -1, -1):
si i> = (1 << (n-1)):
tree_nodes [i] = tf.nn.embedding_lookup (oración [i- (1 << (n-1))])
más:
left_child = 2 * i + 1
right_child = 2 * i + 2
tree_nodes [i] = your_favorite_net (tree_nodes [left_child],
tree_node [right_chid])

P / S: Ahora, si piensa en el método anterior por un momento, también funciona para árboles binarios completos, donde puede usar la misma estructura de matriz, con la única diferencia de que su matriz no tiene longitud [matemática] 2 ^ {n-1} [/ matemáticas].

P / S2: Oh, si no te importa usar un dict Python en lugar de una list para representar tu árbol, entonces no veo ningún problema con ningún árbol binario.

More Interesting

¿Qué puedo hacer con una base de datos de 800 GB de un sitio de reserva de boletos en línea? (Películas, obras de teatro, algunos eventos deportivos)?

¿Qué tan profundo es el aprendizaje profundo?

¿Es posible usar el servicio de reconocimiento facial de Facebook desde su API?

¿Cuál es el tamaño de equipo típico para un proyecto de aprendizaje automático?

¿Cómo validaría un modelo que creó para generar un modelo predictivo de una variable de resultado cuantitativa mediante regresión múltiple?

¿Por qué TensorFlow tiene definiciones para muchas operaciones matemáticas?

¿Cómo analizan los algoritmos de aprendizaje automático y los algoritmos basados ​​en léxico las palabras coloquiales en un análisis de sentimientos de Twitter?

¿Hay algún resumen de las mejores modelos para el premio de Netflix? ¿Cuáles son las ideas de alto nivel e intuitivas detrás de los modelos ganadores que finalmente fueron utilizados en el aprendizaje conjunto por los mejores equipos?

¿Cuáles son los buenos pesos iniciales en una red neuronal?

¿Qué significa decir que dos clasificadores son independientes?

Aprendizaje automático: ¿qué significa 'Los bosques aleatorios requieren casi ninguna preparación de entrada'?

¿Cuáles son las aplicaciones del tensor en estadística y aprendizaje automático?

¿Puede el aprendizaje automático diagnosticar el autismo?

¿Cuáles son las diferencias entre Apache Spark y el Tensor Flow de Google?

¿Es necesario un conjunto de validación si no se realiza un ajuste de hiperparámetro?