【发布时间】:2020-01-25 04:12:50
【问题描述】:
我对使用 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: Expected binary or unicode string, got tf.Tensor 'args_0:0' shape=() dtype=string”
在我看来,追溯看起来像是专门针对“filePath.readlines()”而中断的,我们将不胜感激任何帮助。
完整的错误输出:
----------------------------------- ---------------------------- TypeError Traceback(最近一次调用 最后)模块中的 ipython-input-6-e12909fb73cd 1 ds=tf.data.Dataset.from_tensor_slices([img1Path,img2Path]) ----> 2 ds=ds.map(pathToImgTF)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py 在地图(自我,map_func,num_parallel_calls)1770如果 num_parallel_calls 为无:1771 返回 DatasetV1Adapter( -> 1772 MapDataset(self, map_func, preserve_cardinality=False)) 1773 else: 1774 返回 数据集V1Adapter(
~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py 在 init(self, input_dataset, map_func, use_inter_op_parallelism, 保留基数,使用旧功能)3188
self._transformation_name(),3189 数据集=输入数据集, -> 3190 use_legacy_function=use_legacy_function)3191 variant_tensor = gen_dataset_ops.map_dataset(3192
input_dataset._variant_tensor, # pylint: disable=protected-access~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py 在 init(self, func, transformation_name, dataset, input_classes, input_shapes, input_types, input_structure, add_to_graph, use_legacy_function, defun_kwargs) 2553 resource_tracker = tracking.ResourceTracker() 2554 与 tracking.resource_tracker_scope(resource_tracker): -> 2555 self._function = wrapper_fn._get_concrete_function_internal() 2556 如果 add_to_graph:2557
self._function.add_to_graph(ops.get_default_graph())~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\eager\function.py 在 _get_concrete_function_internal(self, *args, **kwargs) 1353
"""获取图形函数时绕过错误检查。""" 1354
图函数 = self._get_concrete_function_internal_garbage_collected( -> 1355 *args, **kwargs) 1356 # 我们将此具体函数返回给某人,他们可能会保留 1357 # 对 FuncGraph 的引用而不保留对 的引用~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\eager\function.py 在 _get_concrete_function_internal_garbage_collected(self, *args, **kwargs) 1347 if self.input_signature: 1348 args, kwargs = None, None -> 1349 graph_function,_,_ = self._maybe_define_function(args, kwargs) 1350 return graph_function 1351
~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\eager\function.py 在 _maybe_define_function(self, args, kwargs) 1650
graph_function = self._function_cache.primary.get(cache_key, None)
1651 如果 graph_function 为无: -> 1652 graph_function = self._create_graph_function(args, kwargs) 1653 self._function_cache.primary[cache_key] = graph_function 1654 返回 graph_function, args, kwargs~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\eager\function.py 在 _create_graph_function(self, args, kwargs, override_flat_arg_shapes)1543 arg_names=arg_names,
第1544章 -> 1545 capture_by_value=self._capture_by_value), 1546 self._function_attributes) 1547~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\framework\func_graph.py 在 func_graph_from_py_func(名称,python_func,args,kwargs,签名, func_graph,签名,autograph_options,add_control_dependencies, arg_names、op_return_value、集合、capture_by_value、 override_flat_arg_shapes) 第713章 714 --> 715 func_outputs = python_func(*func_args, **func_kwargs) 716 717 # 不变量:
func_outputs只包含张量,复合张量,~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py 在 wrapper_fn(*args) 2547 属性=defun_kwargs)
第2548章 -> 2549 ret = _wrapper_helper(*args) 2550 ret = self._output_structure._to_tensor_list(ret) 2551 返回 [ops.convert_to_tensor(t) for t in ret]~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\data\ops\dataset_ops.py 在 _wrapper_helper(*args) 2487 嵌套_args = (nested_args,) 2488 -> 2489 ret = func(*nested_args) 2490 # 如果
func返回张量列表,nest.flatten()和 2491 #ops.convert_to_tensor()会合谋堆叠在 pathToImgTF(path) 9 def pathToImgTF(路径): 10 以 tf.io.gfile.GFile(path,'rb') 作为文件路径: ---> 11 step1=filePath.readlines() 12 step2=[x.strip(b'\n') for x in step1] 第 2 步中的 x 为 13:
~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\lib\io\file_io.py 在 readlines(self) 中 181 def readlines(自我): 182 """返回列表中文件的所有行。""" --> 183 self._preread_check() 184 行 = [] 185而真:
~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\lib\io\file_io.py 在 _preread_check(self) 82“文件未打开以供阅读”) 83 self._read_buf = pywrap_tensorflow.CreateBufferedInputStream( ---> 84 compat.as_bytes(self.__name), 1024 * 512) 85 86 def_prewrite_check(自我):
~\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\util\compat.py 在 as_bytes(bytes_or_text, 编码) 63 其他: 64 raise TypeError('预期的二进制或 unicode 字符串,得到 %r' % ---> 65 (bytes_or_text,)) 66 67
TypeError: Expected binary or unicode string, got tf.Tensor 'args_0:0' shape=() dtype=string
【问题讨论】:
标签: python tensorflow