[英]Build tensorflow dataset of images from path list
我正在尝试基于包含图像列表的文件构建一个 tensorflow 数据集,但是,即使我尝试了我的代码的许多变体,我总是会遇到相同的错误。
我做的第一件事是加载一个 pandas dataframe df = pd.read_csv('myfile.csv')
文件是这样的:
filename,mynumber
/path/to/image1.png,100
/path/to/image2.png,200
/path/to/image2.png,300
[...]
接下来我要做的是添加一个名为“image_data”的新列,使用 function 加载图像数据,如下所示:
def load_image(file_name):
raw = tf.io.read_file(file_name)
tensor = tf.io.decode_image(raw)
tensor = tf.cast(tensor, tf.float32)
return tensor
df['bytes'] = df['filename'].apply(lambda f: load_image(f))
为清楚起见,我将新创建的列分配给 X,将 label 列分配给 Y:
X = df['bytes']
Y = df['mynumber']
我定义了一个简单的顺序 model:
model = tf.keras.Sequential([
tf.keras.layers.Rescaling(1./255,input_shape=(1264, 1984, 1)),
tf.keras.layers.Dense(1, activation=tf.nn.softmax)
])
最后,在调用 compile 方法后,我尝试这样调用 fit:
model.fit(X, Y, epochs=5, batch_size=12, verbose=1)
然后我收到以下错误
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type tensorflow.python.framework.ops.EagerTensor).
我尝试了我的代码的许多变体,但没有成功。 我想我正在以错误的方式加载图像数据。 我错过了什么? 谢谢
看来您正在尝试使用不受支持的 tf.Tensors 列来匹配您的 model。 要向您的 model 提供数据,您需要创建一个 TensorFlow 数据集。 这是一种方法:
def load_image(file_name):
raw = tf.io.read_file(file_name)
tensor = tf.io.decode_image(raw)
tensor = tf.cast(tensor, tf.float32) / 255.0
return tensor
def create_dataset(file_names, labels):
dataset = tf.data.Dataset.from_tensor_slices((file_names, labels))
dataset = dataset.map(lambda file_name, label: (load_image(file_name), label))
return dataset
file_names = df['filename'].to_numpy()
labels = df['mynumber'].to_numpy()
dataset = create_dataset(file_names, labels)
model = tf.keras.Sequential([
tf.keras.layers.Lambda(lambda x: tf.keras.backend.resize_images(x, (1264, 1984), "channels_last"), input_shape=(None, None, 3)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(1, activation=tf.nn.softmax)
])
model.compile(optimizer='adam', loss='mse')
model.fit(dataset.batch(12), epochs=5, verbose=1)
请注意,不是使用 Rescaling 层,而是使用具有 resize_images function 的 Lambda 层来调整图像大小,并且通过在 load_image function 中除以 255.0 对图像进行归一化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.