guide batch tensorflow tensorflow-datasets

batch - TensorFlow: "No se puede capturar un nodo con estado por valor" en la API tf.contrib.data



tensorflow dataset batch (1)

Desafortunadamente, tf.Variable es inherentemente con estado. Sin embargo, este error solo aparece si usa Dataset.make_one_shot_iterator() para crear el iterador. * Para evitar el problema, puede usar Dataset.make_initializable_iterator() , con la advertencia de que también debe ejecutar iterator.initializer en el iterador devuelto después de ejecutar el inicializador para los objetos tf.Variable utilizados en la tubería de entrada.

* El motivo de esta limitación es un detalle de implementación de Dataset.make_one_shot_iterator() y la función en progreso TensorFlow ( Defun ) compatible que utiliza para encapsular la definición del conjunto de datos. Dado que el uso de recursos con estado como tablas de búsqueda y variables ha sido más popular de lo que inicialmente imaginamos, estamos buscando formas de relajar esta restricción.

Para el aprendizaje de transferencia, a menudo se usa una red como un extractor de características para crear un conjunto de datos de características, en el que se entrena otro clasificador (por ejemplo, un SVM).

Quiero implementar esto usando la API Dataset ( tf.contrib.data ) y dataset.map() :

# feature_extractor will create a CNN on top of the given tensor def features(feature_extractor, ...): dataset = inputs(...) # This creates a dataset of (image, label) pairs def map_example(image, label): features = feature_extractor(image, trainable=False) # Leaving out initialization from a checkpoint here... return features, label dataset = dataset.map(map_example) return dataset

Al hacerlo, falla al crear un iterador para el conjunto de datos.

ValueError: Cannot capture a stateful node by value.

Esto es cierto, los núcleos y los sesgos de la red son variables y, por lo tanto, con estado. Para este ejemplo en particular, no tienen que serlo.

¿Hay alguna manera de hacer Ops y específicamente tf.Variable objetos sin estado?

Como tf.layers no puedo simplemente crearlos como constantes, y la configuración de trainable=False no creará constantes ni tampoco agregará las variables a la colección GraphKeys.TRAINABLE_VARIABLES .