我是Tensorflow的新手,所以我非常感谢任何有建设性的帮助
我正在尝试使用Tensorflow构建一个用于视频处理的特征提取和数据管道,其中多个文件夹包含具有多个类的视频文件(JHMDB数据库),但有点卡住
我已将特征提取到一个文件夹中,目前用于分离*.npz压缩数组,在文件名中我还存储了类名
首先,我想我会使用TF教程网站上的代码,简单地从文件夹中读取文件方法:
jhmdb_path = Path('...')
# Process files in folder
list_ds = tf.data.Dataset.list_files(str(jhmdb_path/'*.npz'))
for f in list_ds.take(5):
print(f.numpy())
def process_path(file_path):
labels = tf.strings.split(file_path, '_')[-1]
features = np.load(file_path)
return features, labels
labeled_ds = list_ds.map(process_path)
for a, b in labeled_ds.take(5):
print(a, b)
TypeError: expected str, bytes or os.PathLike object, not Tensor
…但这不起作用
然后我想我会使用发电机:
# using generator
jhmdb_path = Path('...')
def generator():
for item in jhmdb_path.glob("*.npz"):
features = np.load(item)
print(item.files)
print(f['PAFs'].shape)
features = features['PAFs']
yield features
dataset = tf.data.Dataset.from_generator(generator, (tf.uint8))
iter(next(dataset))
TypeError: 'FlatMapDataset' object is not an iterator...not working.
在第一种情况下,路径是一种字节类型,我无法将其更改为str
,以便能够使用np.load()
加载它。(如果我将一个文件直接指向np.load(direct_path)
,则很奇怪,但它可以工作。)
在第二种情况下。。。我不确定出了什么问题
我花了几个小时寻找一个解决方案,如何从数量相对较大的“npz”或“npy”文件列表中构建一个可移植的数据集,但似乎在任何地方都没有提到这一点(或者可能是太琐碎了)
另外,由于我目前还不能测试模型,我不确定这是否是一个好的方法。也就是说,以这种方式为模型提供数百个文件,或者只构建一个巨大的3.5 GB npz(该npz适合内存),然后使用它。或者使用TFrecords,但这看起来比通常的示例更复杂
这里真正令人恼火的是,TF教程和一般都是关于如何直接加载就绪数据集,或如何加载np
数组,或如何加载图像、文本、数据帧对象,但没有找到任何实际示例如何处理大块数据文件,例如从音频或视频文件提取特征
因此,任何建议或解决方案都将受到高度赞赏,我将非常非常感谢终于有了一个可行的解决方案!:)
目前没有回答
相关问题 更多 >
编程相关推荐