Tensorflow Dataset数据集制作专题【二】— 将图片文件制作成Dataset数据集

本文详述了作者在将图片文件制作成TensorFlow Dataset数据集时遇到的困难,特别是针对PyFunc的错误排查过程。通过调试和研究,解决了返回值类型不匹配的问题,最终成功实现了转换代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今晚这个代码愣是调试了好一会,弄的我是满脑子在飘"为啥是这样", 网上博客搜索一堆, 也没有解决我的问题,先看一下这个神奇的存在:

错误代码段
image_rotated = tf.py_func(_rotated, [image], [tf.float64])

报错:
tensorflow.python.framework.errors_impl.InvalidArgumentError: 0-th value returned by pyfunc_0 is float, but expects double
	 [[Node: cond/PyFunc = PyFunc[Tin=[DT_FLOAT], Tout=[DT_DOUBLE], token="pyfunc_0"](cond/Switch_1)]]
	 [[Node: IteratorGetNext_1 = IteratorGetNext[output_shapes=[<unknown>, [?]], output_types=[DT_FLOAT, DT_INT32], 
	 _device="/job:localhost/replica:0/task:0/device:CPU:0"](OneShotIterator_1)]]

很明显, 我的bug定位在Node几点的PyFunc处,而且错误也能看的明白, 是Tin返回值的类型(float)错误, 与expect(double)不一致导致的,明白了这一点, 回头查看调用tf.py_func()函数的地方的输入, 愣是觉得没啥问题呀, 到底哪里出错了, 后来经过我一番琢磨和尝试,终于修改成功了, 将原来的代码修改为如下即可:

正确代码
image_rotated = tf.py_func(_rotated, [image], [tf.float32])

真是坑人不浅啊啊啊......

下面附上详细的将图片文件转换为Dataset数据集的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @ProjectName : 06_create_image_dataset.py
# @DateTime :  2019-11-30 13:32
# @Author : 皮皮虾

# 变化丰富的数据集会使模型的精度和泛化性能成倍的提升
# 一套成熟的代码,可以使开发数据集的工作简化很多


import os
import logging
import argparse
import numpy as np
import tensorflow as tf
from skimage import transform
import matplotlib.pyplot as plt
from sklearn.utils import shuffle


def load_sample(src_path):
    image_path_list = []
    real_label_list = []
    for _dir_ in os.listdir(src_path):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值