Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow-从Tensor中提取字符串_Python_Tensorflow_Tensor_Tensorflow Datasets - Fatal编程技术网

Python Tensorflow-从Tensor中提取字符串

Python Tensorflow-从Tensor中提取字符串,python,tensorflow,tensor,tensorflow-datasets,Python,Tensorflow,Tensor,Tensorflow Datasets,我正试图遵循的“使用tf.data加载”部分。在本教程中,他们可以只使用字符串张量,但是,我需要提取文件名的字符串表示形式,因为我需要从字典中查找额外的数据。我似乎无法提取张量的弦部分。我很确定张量的.name属性应该返回字符串,但我一直收到一条错误消息,说KeyError:'stripped\u slice\u 1:0',所以不知为什么,切片做了一些奇怪的事情 我正在使用以下方法加载数据集: dataset\u list=tf.data.dataset.list\u文件(str(dataset

我正试图遵循的“使用tf.data加载”部分。在本教程中,他们可以只使用字符串张量,但是,我需要提取文件名的字符串表示形式,因为我需要从字典中查找额外的数据。我似乎无法提取张量的弦部分。我很确定张量的
.name
属性应该返回字符串,但我一直收到一条错误消息,说
KeyError:'stripped\u slice\u 1:0'
,所以不知为什么,切片做了一些奇怪的事情

我正在使用以下方法加载数据集:

dataset\u list=tf.data.dataset.list\u文件(str(dataset\u DIR/“data/*”)
然后使用以下方法进行处理:

def过程(t):
返回数据集。处理图像路径(t,参数数据,参数最小值最大值)
dataset_label=dataset_list.map(
过程
num_parallel_calls=自动调谐)
其中
param_data
param_min_max
是我加载的两个字典,其中包含构造标签所需的额外数据

以下是我用来处理数据张量的三个函数(来自我的
dataset.py
):

def进程图像路径(图像路径、参数数据文件、参数最大最小文件):
标签=路径到标签(图像路径、参数数据文件、参数最大值最小值文件)
img=tf.io.read\u文件(图像路径)
img=解码\u img(img)
退货(img,标签)
def解码img(img):
“”“将图像转换为3D uint8张量”“”
img=tf.image.decode\u jpeg(img,通道=3)
img=tf.image.convert\u image\u数据类型(img,tf.float32)
返回img
定义路径到标签(图像路径、参数数据文件、参数最大值最小值文件):
“”“返回图像的规范化标签(一组参数值)。”“”
parts=tf.strings.split(image\u path,os.path.sep)
filename=parts[-1]#使用扩展名提取文件名
filename=tf.strings.split(filename,“.”[0]。name#提取文件名
param_data=param_data_文件[文件名]#错误。上面的name似乎不仅仅返回文件名
P=len(参数最大最小文件)
标签=np.零(P)
i=0
而i

我已经验证了
path\u to\u label()
中的
filename=tf.strings.split(filename,“.”[0]
确实返回了正确的张量,但我需要它作为字符串。事实证明,整个过程也很难调试,因为调试时我无法访问属性(如果启用了急切执行,我会收到错误信息,说
AttributeError:Tensor.name没有意义。
)。

name
字段是张量本身的名称,而不是张量的内容

要执行常规python字典查找,请将解析函数包装在
tf.py_func

import tensorflow as tf
tf.enable_eager_execution()

d = {"a": 1, "b": 3, "c": 10}
dataset = tf.data.Dataset.from_tensor_slices(["a", "b", "c"])

def parse(s):
  return s, d[s]
dataset = dataset.map(lambda s: tf.py_func(parse, [s], (tf.string, tf.int64)))

for element in dataset:
  print(element[1].numpy()) # prints 1, 3, 10

谢谢,但我决定我应该把所有的东西都当作张量。所以现在我把这些值作为CSV文件输出!我可以使用
tf.data.experimental.CsvDataset
读取此文件,然后使用图像数据集压缩此文件,然后将其映射为元组。