En el tutorial de Google / Udemy Tensorflow hay el siguiente código:

import tensorflow as tf
...
def read_data(filename):
    """Extract the first file enclosed in a zip file as a list of words"""
    with zipfile.ZipFile(filename) as f:
    data = tf.compat.as_str(f.read(f.namelist()[0])).split()
return data

Esto se ejecuta bien, pero no puedo encontrar compat.as_str en la documentación de Tensorflow ni en ningún otro lugar.

P1: ¿Qué hace compat.as_str?

P2: ¿Esta biblioteca de tensorflow compat está documentada en alguna parte?

P3: Esta es una llamada a la biblioteca de tensorflow, entonces, ¿cómo y por qué funciona en el código normal de Python, en lugar de dentro de un gráfico de tensorflow? Es decir. Pensé que las llamadas a la biblioteca de tensorflow tenían que estar dentro de un bloque de definición de gráfico de tensorflow:

graph = tf.Graph()
with graph.as_default()
    ... tensorflow function calls here ...

Estoy ejecutando python 2.7.

19
Ron Cohen 8 jun. 2016 a las 00:36

3 respuestas

La mejor respuesta

Básicamente, proviene del hecho de que en Python 2, las cadenas se trataron principalmente como bytes, no como unicode.
En Python 3, todas las cadenas son nativamente unicode.
El propósito de la función es garantizar que, independientemente de la versión de Python que esté utilizando, no se moleste, de ahí que el nombre del módulo compat sea compatible.

Bajo el capó, tensorflow.compat.as_str convierte las cadenas bytes y unicode en cadenas unicode.

Signature: tensorflow.compat.as_str(bytes_or_text, encoding='utf-8')
Docstring:
Returns the given argument as a unicode string.

Args:
  bytes_or_text: A `bytes`, `str, or `unicode` object.
  encoding: A string indicating the charset for decoding unicode.

Returns:
  A `unicode` (Python 2) or `str` (Python 3) object.

Raises:
  TypeError: If `bytes_or_text` is not a binary or unicode string.

La biblioteca está documentada aquí.

18
Jacquot 9 mar. 2018 a las 09:23

En una versión actual de TF, todo el tf.compat es bien documentado

Básicamente, algunas cosas se comportan de manera diferente en Python 2 y 3 (puede ser un poco impreciso, los gurus de Python pueden ayudarme con esto). Python3 utiliza flotantes de 64 bits y python2 flotantes de 32 bits, también hay diferencias con respecto a cadenas. El módulo Compat intenta que las cosas se comporten de la misma manera (si marca el código fuente verá que hacen cosas diferentes dependiendo de si usa 2 o 3).


tf.compat.as_str:

Convierte bytes o unicode a bytes, utilizando la codificación utf-8 para texto.

Esto puede ser útil si guarda los datos en tfrecords y desea asegurarse de que se guardarán de la misma manera, sin importar qué versión de Python se use.

3
Salvador Dali 30 jun. 2017 a las 23:45
  1. tf.compat.as_str convierte la entrada en una cadena

  2. No pude encontrar ninguna documentación, pero puede consultar el código fuente aquí

  3. Tensorflow funciona como un módulo de Python. El contexto gráfico se utiliza para definir un gráfico (cálculos matemáticos) que se utilizará para entrenar el modelo.

el uso típico implica el administrador de contexto Graph.as_default (), que anula el gráfico predeterminado actual durante la vida útil del contexto

8
rrao 7 jun. 2016 a las 22:45