转换为TFRecord后,数据与原始数据不匹配

时间:2017-10-25 13:08:15

标签: tensorflow

  

TL:DR;

将我的数据转换为TFRecord后,它与原始数据

不匹配
  

说明

我做了一个method来读取TFRecord数据。我想测试该方法正如我预期的那样工作的方法。所以我创建了一个Tensorflow test case,我在其中创建了一个假的TFRecord文件,给出了一些随机输入数据。并将该数据传递给该方法。结果来自该方法和原始数据,我将它们传递给assertAllEqual()方法进行单元测试。但测试失败了。

这是测试错误

AssertionError: 
Arrays are not equal

(mismatch 66.66666666666666%)
x: array([[[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  0.,  0.],...
y: array([[[  0,   0,   0],
    [  0,   0,   0],
    [  0,   0,   0],...

not equal where =  (array([10, 10, 10, ..., 31, 31, 31]), array([21, 21, 22, ..., 31, 31, 31]), array([1, 2, 0, ..., 0, 1, 2]))
not equal lhs =  [128 128 128 ..., 255 255 255]
not equal rhs =  [ 0.  0.  0. ...,  0.  0.  0.]

假数据的形状(3,32,32,3)

  

尝试过的解决方案:

  1. 尝试了不同的输入
  2. 尝试使用RandomSuffleQueue而不是FIFOQueue
  3. 检查标签上的测试是否通过。是!通过标签测试!
  4.   

    我的问题:

    1. 出了什么问题?
    2. 第一个用于读取TFRecord文件的方法有问题吗?
    3. 我在测试用例中做错了吗?

1 个答案:

答案 0 :(得分:0)

  

我找到了解决方案。问题出在我测试的情况下,我做了我的   用于测试目的的虚假数据。 虚假数据的生成是错误的。

我改变了我的代码

records = [self._record(0, 128, 255),
               self._record(255, 0, 1),
               self._record(254, 255, 0)]

到这个

    image_array_1 = np.random.random((32, 32, 3))
    image_array_2 = np.random.random((32, 32, 3))
    image_array_3 = np.random.random((32, 32, 3))

    formatted1 = (image_array_1 * 255 / np.max(image_array_1)).astype('uint8')
    formatted2 = (image_array_2 * 255 / np.max(image_array_2)).astype('uint8')
    formatted3 = (image_array_3 * 255 / np.max(image_array_3)).astype('uint8')
    images_data_set = [formatted1, formatted2, formatted3]

测试完成了!