XJTU_Ironboy 2017-09-04 14:30 采纳率: 0%
浏览 4900

怎么在TensorFlow上导入ImageNet数据进行试验?

请问一下,将数据集转为tfrecord格式之后,自己load数据的时候经常跑到一半报错

tensorflow.python.framework.errors_impl.OutOfRangeError: RandomShuffleQueue '_1_shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 1, current size 0)
     [[Node: shuffle_batch = QueueDequeueUpToV2[component_types=[DT_UINT8, DT_INT32], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](shuffle_batch/random_shuffle_queue, shuffle_batch/n)]]

怎么回事,我这部分的代码大致是这样的:

import os
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt 
import tensorflow.contrib.slim as slim
from PIL import Image
tfrecord_paths = "./ImageNet_validate.tfrecord"
def read_and_decode(filename):
    #根据文件名生成一个队列
    filename_queue = tf.train.string_input_producer([filename])

    reader = tf.TFRecordReader()
    _, serialized_example = reader.read(filename_queue)   #返回文件名和文件
    features = tf.parse_single_example(serialized_example,
                                       features={
                                           'label': tf.FixedLenFeature([], tf.int64),
                                           'image' : tf.FixedLenFeature([], tf.string),
                                       })

    img = tf.decode_raw(features['image'], tf.uint8)
    img = tf.reshape(img,[1,433200])
    # img = tf.reshape(img, [380, 380, 3])
    # img = tf.cast(img, tf.float32) * (1. / 255) - 0.5
    label = tf.cast(features['label'], tf.int32)

    return img, label

img, label = read_and_decode(tfrecord_paths)

img_batch, label_batch = tf.train.shuffle_batch([img, label],
                                                batch_size=1, capacity=1000,
                                                num_threads = 512,
                                                allow_smaller_final_batch=True,
                                                min_after_dequeue=1)

global_init = tf.global_variables_initializer()
local_init = tf.local_variables_initializer()

with tf.Session() as sess:
    sess.run(global_init)
    sess.run(local_init)
    coord=tf.train.Coordinator()
    threads= tf.train.start_queue_runners(coord=coord)
    for i in range(1000):
        print(i)
        print("image:",img_batch.get_shape().as_list())
        print("label:",label_batch.get_shape().as_list())
        val, l= sess.run([img_batch,label_batch])
        print(val.shape, l)
  • 写回答

2条回答

  • xiaoyaoyao17 2018-08-06 06:48
    关注

    需要生成 TFRcords 才可以用 TensorFlow 读取

    评论

报告相同问题?

悬赏问题

  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了