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