首页 > 解决方案 > 如何将 NumPy 图像数组转换为 Tensorflow

问题描述

我有两个包含图像和标签的形状数组(600,)。当我尝试以任何形式将它们传递给 Keras/Tensorflow 时,我收到错误消息:

ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)。

据我了解,图像存储在数组数组中。观察内部数组(单个图像)时,它们具有以下属性:

dtype=uint8 的数组,形状为:(x, 500, 3),其中 x 介于 300 和 500 之间。

我能够通过 pandas.apply 在图像数组上应用 tf 层,希望问题出在图像大小不一致:

resize_and_rescale = tf.keras.Sequential([
  tf.keras.layers.experimental.preprocessing.Resizing(IMG_SIZE, IMG_SIZE),
  tf.keras.layers.experimental.preprocessing.Rescaling(1./255)
])
train_df.image = train_df.image.apply(resize_and_rescale)

此代码执行成功,但生成的 Eager tensor 仍然与 tensorflow 不兼容:

train_dataset = tf.data.Dataset.from_tensor_slices((train_df.image.values, train_df.label.values))

ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型 tensorflow.python.framework.ops.EagerTensor)。

如何将图像数组加载到 tf 中?

我已经尝试了以下加载功能,但未成功:

NumpyArrayIterator

from_tensor_slices

ImageDataGenerator.flow

标签: pythonarraysnumpytensorflowimage-processing

解决方案


首先,您应该尝试将 from_tensor_slices 的输入转换为 600 个数组的列表。该函数目前仅将其视为 1 个样本,即第一个形状为 600 的数组,从而产生错误。


推荐阅读