我拥有一个numpy文件的数据集,它们与我的所有标签一起列在csv(每个numpy文件路径(中。要素列是每个文件的路径。
读到一些老问题(从csv文件读取图像并返回tf.data.Dataset对象的有效方法(,我想我可以使用这样的东西:
def load_and_preprocess_image(path):
image = np.load(path)
return preprocess_image(image)
def load_and_preprocess_from_path_label(path, label):
return load_and_preprocess_image(path), label
dataset_train = tf.data.Dataset.from_tensor_slices((train_features.values, train_labels.values))
dataset_train_Batched = dataset_train.map(partial(load_and_preprocess_from_path_label))
但我得到了一个错误,因为";路径";不是字符串也不是路径,而是张量。。。如何读取这个张量来获得值?我试过使用
def load_and_preprocess_image(path):
sess = tf.compat.v1.Session()
with sess.as_default():
a_value = sess.run(path)
image = np.load(a_value)
return preprocess_image(image)
这无济于事。我被卡住了。
你能帮我找到如何读取路径来预处理我的numpyfiles吗?
非常感谢,Alex
我找到了一个解决方案。
该问题是由于";地图";方法
您可以使用.numbery来获取张量的值,但不能使用map。
例如:此代码有效:
for ds,ds2 in dataset_train.take(1):
pathtest, labeltest = load_and_preprocess_from_path_label(ds.numpy()[0], ds2)
但这个不起作用:
dataset_train_Batched = dataset_train.shuffle(42).map(lambda x,y : load_and_preprocess_from_path_label(x.numpy[0],y)).batch(BATCH)
如果使用map方法,则必须使用tf.py_function来读取张量。
就我而言:
def load_and_preprocess_image(path):
[image,] = tf.py_function(np.load, [path], [tf.string])
return preprocess_image(image)
def load_and_preprocess_from_path_label(path, label):
return load_and_preprocess_image(path), label
祝度过美好的一天