2016-06-07 17 views
15

Nel Google/Udemy Tensorflow tutorial c'è il seguente codice:Che cos'è tensorflow.compat.as_str()?

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 

Esegue bene, ma non riesco a trovare compat.as_str nella documentazione tensorflow o altrove.

Q1: Che cosa fa compat.as_str?

Q2: questa libreria di tensorflow compat è stata documentata da qualche parte?

Q3: Questa è una chiamata alla libreria tensorflow, quindi come e perché funziona nel normale codice Python, piuttosto che all'interno di un grafico di tensorflow? Cioè Ho pensato che le chiamate alla libreria di tensorflow dovevano essere all'interno di un blocco di definizione del grafico di tensorflow:

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

Sto eseguendo python 2.7.

risposta

14

Fondamentalmente, deriva dal fatto che in Python 2 le stringhe venivano gestite principalmente come byte, non come unicode.
In Python 3, tutte le stringhe sono nativamente unicode.
Lo scopo della funzione è quello di garantire che qualsiasi versione di Python che si sta utilizzando non sarà disturbata, quindi il nome del modulo compat rappresenta la compatibilità.

Sotto il cofano, tensorflow.compat.as_str converte stringhe sia bytes che unicode in stringhe 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 è documentata here.

8
  1. tf.compat.as_str converte in una stringa di input

  2. non ho potuto trovare alcuna documentazione, ma si può guardare il codice sorgente di here

  3. funzioni tensorflow come modulo python. Lo graph context viene utilizzato per definire un grafico (calcoli matematici) che verrà utilizzato per addestrare il modello.

uso tipico coinvolge il gestore contesto Graph.as_default(), che sostituisce il grafico predefinito corrente per la durata del contex

1

In una versione corrente di TF, l'intero gruppo tf.compat è ben documentato.

Fondamentalmente alcune cose si comportano in modo diverso in Python 2 e 3 (potrebbe essere leggermente impreciso, i guru pitone possono aiutarmi con questo). Python3 usa float a 64 bit e float a 32 bit di python2, ci sono anche differenze rispetto a strings. Il modulo di compatibilità cerca di comportarsi nello stesso modo (se verifichi lo source code vedrai che fanno cose diverse a seconda che tu usi 2 o 3).


tf.compat.as_str:

Converte sia byte o unicode in byte, utilizzando utf-8 codifica testo.

Questo può essere utile se si salvano i dati in tfrecords e si desidera assicurarsi che vengano salvati nello stesso modo, indipendentemente dalla versione di Python utilizzata.

+0

Sospetto che ci sia un errore nella documentazione, poiché l'output di 'tf.compat.as_str' è sempre una stringa' unicode', non '' bytes' – Jacquot