在Google/Udemy Tensorflow tutorial中有以下代码:
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
这样可以正常运行但我在Tensorflow文档或其他任何地方都找不到compat.as_str
。
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。
答案 0 :(得分:17)
基本上,它来自这样一个事实,即在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.
图书馆已记录here。
答案 1 :(得分:8)
tf.compat.as_str
将输入转换为字符串
我找不到任何文档,但您可以查看源代码here
Tensorflow充当python模块。 graph context用于定义将用于训练模型的图形(数学计算)。
典型用法涉及Graph.as_default()上下文管理器,它会覆盖上下文生命周期的当前默认图形
答案 2 :(得分:3)
在当前版本的TF中,整个tf.compat
组都有很好的文档记录。
基本上有些东西在python 2和3中表现不同(可能稍微不准确,python大师可以帮我解决这个问题)。 Python3使用64位浮点数和python2 32位浮点数,与strings相比也存在差异。 Compat模块尝试以相同的方式执行操作(如果您将检查source code,您将看到它们执行不同的操作,具体取决于您是使用2还是3)。
使用utf-8编码将字节或unicode转换为字节 文本。
如果您将数据保存在tfrecords中并希望确保无论使用哪个python版本都以相同的方式保存数据,这会很有用。