Что такое tensorflow.compat.as_str()?

В учебнике Google/Udemy Tensorflow приведен следующий код:

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

Это выполняется отлично, но я не могу найти compat.as_str в документации Tensorflow или где-либо еще.

Q1: Что делает compat.as_str?

Q2: Является ли это tensorflow compat задокументирована где библиотека?

Q3: Это вызов библиотеки tensorflow, так как и почему она работает в нормальном коде python, а не внутри графика тензорного потока? Т.е. я думал, что вызовы библиотеки tensorflow должны быть внутри блока дефискации графа тензорного потока:

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

Я запускаю python 2.7.

Ответ 1

В основном это происходит из-за того, что в Python 2 строки обрабатывались прежде всего как байты, а не unicode.
В Python 3 все строки являются естественными unicode.
Цель этой функции заключается в обеспечении того, какой бы ни версию Python, который вы используете, вы не будете беспокоить, поэтому compat имя модуля, стоя на совместимость.

Под капотом tensorflow.compat.as_str преобразует оба bytes и unicode строку в 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.

Библиотека документирована здесь.

Ответ 2

  1. tf.compat.as_str преобразует ввод в строку

  2. Я не мог найти никакой документации, но вы можете посмотреть исходный код здесь

  3. Tensorflow функционирует как модуль python. Контекст графа используется для определения графика (математических вычислений), который будет использоваться для обучения модели.

типичное использование включает в себя диспетчер контекстов Graph.as_default(), который переопределяет текущий график по умолчанию для срока действия контекса

Ответ 3

В текущей версии TF вся группа tf.compat хорошо документирована.

В принципе, некоторые вещи ведут себя по-разному в python 2 и 3 (может быть немного неточно, гуру python могут помочь мне с этим). Python3 использует 64-битные поплавки и 32-битные поплавки python2, также существуют различия по отношению к строкам. Модуль-совместитель пытается вести себя так же (если вы проверите исходный код, вы увидите, что они делают разные вещи в зависимости от того, используете ли вы 2 или 3).


tf.compat.as_str:

Преобразует либо байты, либо unicode в байты, используя кодировку utf-8 для текста.

Это может быть полезно, если вы сохраняете данные в tfrecords и хотите убедиться, что они будут сохранены одинаково, независимо от того, какая версия python используется.