Tensorflow读取图片并转换成张量

使用神经网络对图片文件进行训练时,需要将图片信息转换为张量,这里介绍如何将图片信息转化为Tensorflow的张量信息。

本文完整代码:https://github.com/iapcoder/TensorflowReadIMG


一 步骤

1、构造文件队列

file_queue = tf.train.string_input_producer(file_list, shuffle=True) #file_list:图片路径列表,shuffle: True表示随机打乱顺序,返回一个队列

2、构造图像阅读器读取图片内容(默认只读取一张图片)

reader = tf.WholeFileReader()
key, value = reader.read(file_queue) # key:文件名 value:文件内容

3、对读取的数据进行解码(不同的图片格式有不同的解码方式),以jpeg格式为例

image = tf.image.decode_jpeg(value)

4、处理图片的大小、使得每个样本的height、weight一样,方便后续处理

image_resize = tf.image.resize_image(image, [100,100]) # 将图片处理成100*100像素
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用TensorFlow中的`tf.data.Dataset` API来批量读取和预处理图片数据。 以下是一个示例代码,假设要读取目录中所有的JPEG像文件: ```python import tensorflow as tf # 定义一些常量 IMAGE_SIZE = 224 BATCH_SIZE = 32 NUM_CLASSES = 10 NUM_EPOCHS = 10 # 构建数据集 def parse_fn(filename, label): # 读取图片数据 image_string = tf.io.read_file(filename) image = tf.image.decode_jpeg(image_string, channels=3) # 调整图片大小 image = tf.image.resize(image, [IMAGE_SIZE, IMAGE_SIZE]) # 数据增强 image = tf.image.random_flip_left_right(image) image = tf.image.random_brightness(image, max_delta=0.2) image = tf.image.random_contrast(image, lower=0.2, upper=1.8) # 转换张量 image = tf.keras.applications.resnet50.preprocess_input(image) return image, label # 读取图片路径和标签信息 image_paths = [...] # 图片路径列表 labels = [...] # 标签列表 # 构建数据集 ds = tf.data.Dataset.from_tensor_slices((image_paths, labels)) ds = ds.map(parse_fn) ds = ds.shuffle(buffer_size=len(image_paths)) ds = ds.batch(BATCH_SIZE) ds = ds.prefetch(tf.data.experimental.AUTOTUNE) # 构建模型 model = tf.keras.applications.ResNet50(input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3), weights=None, classes=NUM_CLASSES) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(ds, epochs=NUM_EPOCHS) ``` 在上述代码中,`parse_fn`函数用于对每个图片文件进行预处理和转换张量。`tf.data.Dataset.from_tensor_slices`函数用于将图片路径和标签信息组成一个元组,然后通过`map`函数将每个元组转换为对应的图片张量和标签。最后,通过`shuffle`、`batch`和`prefetch`函数将数据集随机打乱、分批次处理和提前加载。 注意,上述代码中使用了`tf.keras.applications.resnet50.preprocess_input`函数对图片进行了预处理,这是为了将图片数据转换为ResNet50模型所需的格式。如果你使用的是其他的模型,可能需要使用不同的预处理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值