gpt4 book ai didi

Python:结合使用 astropy.io.fits.open 和 Tensorflow tf.data.Dataset

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:23 25 4
gpt4 key购买 nike

我正在尝试在 Tensorflow 中为包含 .fits 文件的数据集编写自定义输入管道。我有一个文件位置的字符串列表,如下所示

pathlist = ['/path/to/file1', 'path/to/file2', ...]

尽管路径命名约定具有非常具体的子目录,但这只是一个一般示例。我编写了一个简短的函数,当将该函数应用于此列表的每个路径元素时,将输出一个带有适当数据的 numpy.ndarray

import numpy as np
from astropy.io import fits
import tensorflow as tf

def path2im(path):
print(path)
hdulist = fits.open(path)
data = hdulist[1].data
data[np.isnan(data)] = 0
return tf.convert_to_tensor(data.astype(np.float32))

它基本上从路径中打开拟合文件,并提取数据,同时删除 NaN 并将数组转换为张量。我遵循此处设置的指南( Loading Images in a Directory As Tensorflow Data set )来生成 tensorflow 输入管道。我首先从路径列表中定义一个文件名数据集,然后在其上映射函数。

filenames = tf.data.Dataset.list_files(pathlist)
ims = filenames.map(path2im)

运行时,它不会将路径打印为字符串,而是打印为

Tensor("arg0:0", shape=(), dtype=string)

考虑到文件名数据集包含张量,以及映射函数中在这一行失败的巨大错误 block ,这是有道理的

->hdulist = fits.open(path)

因为fits.open(path)接受一个字符串作为路径的参数。有什么办法可以纠正这个问题吗?我无法找到一种在不启动 session 和使用 .eval() 的情况下将字符串张量转换为字符串的方法,我不想在这个初始化阶段这样做。

最佳答案

Dataset API 的主要思想是让您的数据预处理部分成为 TensorFlow 图的一部分,因此,例如,您可以在运行 TensorFlow 图时指定一个文件名作为占位符。

这完全可以预料到对象filenames的类型是一个Tensor,如果你想将它转换为string,您必须使用Session来评估它。

您可能想看看这个introductory guide到数据集。

关于Python:结合使用 astropy.io.fits.open 和 Tensorflow tf.data.Dataset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com