Python 尝试使用tensorflow.io.gfile.gfile和tensorflow.dataset.map,获取;应为二进制或unicode字符串,获得张量dtype=string

Python 尝试使用tensorflow.io.gfile.gfile和tensorflow.dataset.map,获取;应为二进制或unicode字符串,获得张量dtype=string,python,tensorflow,Python,Tensorflow,我对使用Tensorflow非常陌生,想象一下有人会很快告诉我我在做一些愚蠢的事情,所以就这样吧 我正在使用MSTAR数据集,并试图将其读入。这些文件有一种非常奇怪的格式,但可以说,如果在下面的代码上执行了“急切执行”,则可以读取并显示数据集中的图像 import tensorflow as tf import matplotlib.pyplot as plt tf.enable_eager_execution() img1Path='HB15000.018' img2Path='HB1500

我对使用Tensorflow非常陌生,想象一下有人会很快告诉我我在做一些愚蠢的事情,所以就这样吧

我正在使用MSTAR数据集,并试图将其读入。这些文件有一种非常奇怪的格式,但可以说,如果在下面的代码上执行了“急切执行”,则可以读取并显示数据集中的图像

import tensorflow as tf
import matplotlib.pyplot as plt
tf.enable_eager_execution()

img1Path='HB15000.018'
img2Path='HB15001.018'

def pathToImgTF(path):
    with tf.io.gfile.GFile(path,'rb') as filePath:
        step1=filePath.readlines()
        step2=[x.strip(b'\n') for x in step1]
        for x in step2:
            if b'PhoenixHeaderLength' in x:
                line=x.strip().split(b'=')
                PhoenixHeaderLength=int(line[1])
            elif b'native_header_length' in x:
                line=x.strip().split(b'=')
                native_header_length=int(line[1])
            elif b'NumberOfColumns' in x:
                line=x.strip().split(b'=')
                NumberOfColumns=int(line[1])
            elif b'NumberOfRows' in x:
                line=x.strip().split(b'=')
                NumberOfRows=int(line[1])
        filePath.seek(PhoenixHeaderLength+native_header_length)
        step3=tf.decode_raw(filePath.read(),out_type=tf.float32,little_endian=False)
        depth_major=tf.reshape(step3,[2,NumberOfRows,NumberOfColumns])
        image=tf.transpose(depth_major,[1,2,0])[:,:,0] #Cut off phase for now
    return image

img=pathToImgTF(imgPath)
plt.imshow(img,cmap='gray')
我想使用tf.dataset.from_tensor_slices,但这似乎不是一个选项,因为以下代码:

ds=tf.data.Dataset.from_tensor_slices([img1Path,img2Path])
ds=ds.map(pathToImgTF)
给出错误“TypeError:应为二进制或unicode字符串,得到tf.Tensor'args_0:0'shape=()dtype=string”

在我看来,回溯似乎是在“filePath.readlines()”上专门中断的,如有任何帮助,将不胜感激

完整错误输出:

---------------------------------------------------------------------------TypeError回溯(最近的调用 最后)模块中的ipython-input-6-e12909fb73cd 1 ds=tf.data.Dataset.from_tensor_切片([img1Path,img2Path]) ---->2ds=ds.map(pathToImgTF)

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\data\ops\dataset\u ops.py 在map(self,map_func,num_parallel_调用)1770中,如果 num_parallel_调用为None:1771返回DatasetV1Adapter( ->1772映射数据集(self,map_func,preserve_cardinality=False))1773其他:1774返回 数据集适配器(

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\data\ops\dataset\u ops.py 在初始化中(self,输入数据集,映射函数,使用内部操作并行, 保留基数,使用遗留功能)3188
self.\u transformation\u name(),3189数据集=输入数据集, ->3190使用传统功能=使用传统功能)3191变量张量=生成数据集操作地图数据集(3192
输入数据集。变量张量,pylint:disable=受保护访问

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\data\ops\dataset\u ops.py 在初始化中(self、func、转换名称、数据集、输入类、, 输入图形、输入类型、输入结构、向图形添加, 使用传统功能,defun_kwargs)2553资源跟踪程序= tracking.ResourceTracker()2554与 跟踪。资源跟踪者范围(资源跟踪者): ->2555 self.\u function=wrapper\u fn.\u get\u concrete\u function\u internal()如果 添加到图形:2557
self.\u函数。将\u添加到\u图(ops.get\u default\u graph())

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\eager\function.py 在获取具体函数内部(self,*args,**kwargs)1353中
“”“获取图形函数时绕过错误检查。”“1354
图函数= self.\u获取\u具体\u功能\u内部\u垃圾\u收集( ->1355*args,**kwargs)1356#我们将这个具体函数返回给某人,他们可能会保留一个1357# 引用FuncGraph而不保留对

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\eager\function.py 在"获取"具体"函数"内部"垃圾"收集中(self、*args、, **kwargs)1347如果self.input_签名:1348 args,kwargs=None,None ->1349图形函数,可能定义函数(args,kwargs)1350返回图形函数1351

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\eager\function.py 在中定义函数(self、args、kwargs)1650
graph\u function=self.\u function\u cache.primary.get(cache\u key,None)
1651如果图形_函数为无: ->1652图形函数=self.\u创建图形函数(args,kwargs)1653 self.\u函数\u cache.primary[缓存键]= graph_函数1654返回graph_函数,args,kwargs

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\eager\function.py 在创建图形函数中(self、args、kwargs、, 覆盖平面形状)1543参数名称=参数名称,
1544覆盖平面形状=覆盖平面形状, ->1545按值捕获=自身。按值捕获),1546自身。功能属性)1547

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\framework\func\u graph.py 在func_图中,来自于_py_func(名称、python_func、args、kwargs、签名、, 函数图、自动签名、自动签名选项、添加控制依赖项、, 参数名称、操作返回值、集合、按值捕获、, 覆盖(平面形状) 713(转换函数) 714 -->715 func_outputs=python_func(*func_args,**func_kwargs) 716 717#不变量:
func#u输出
仅包含张量、复合传感器、

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\data\ops\dataset\u ops.py 在包装中(*args)2547 attributes=defun\u kwargs)
2548 def wrapper_fn(*args):#pylint:disable=缺少docstring ->2549 ret=\u包装器\u帮助器(*args)2550 ret=self.\u输出\u结构。\u到\u张量\u列表(ret)2551返回 [运算.将ret中的t转换为t张量(t)]

~\AppData\Local\Continuum\anaconda3\lib\site packages\tensorflow\python\data\ops\dataset\u ops.py 在_-wrapper\u-helper(*args)2487嵌套的_-args=(嵌套的_-args,) 2488 ->2489 ret=func(*nested_args)2490#如果
func
返回张量列表,
nest.flatte()
和2491#
ops.convert\u to\u tensor()
将合谋尝试堆叠

在路径toimgtf(路径)中 9 def PATHTOMGTF(路径): 10瓦