已解决,tf.train.batch无限循环

今天想使用cifar10的数据做pocketflow的模型压缩,看到cifar10数据里面有5个batches的二进制文件,bin文件,想把他们合成一个,就想先用tensorflow读取出来,然后在保存成tfrecord形式。
cifar10里面的数据如下:在这里插入图片描述于是我编写了一个python文件:在这里插入图片描述代码如下:
import tensorflow as tf
files_in = ["/home/l/datasets/cifar10/data_batch_%d.bin" % i for i in range(1, 6)]
files = tf.train.string_input_producer(files_in)
reader = tf.FixedLengthRecordReader(record_bytes=1+32323)
key, value = reader.read(files)
data = tf.decode_raw(value, tf.uint8)
label = tf.cast(tf.slice(data, [0], [1]), tf.int64)
raw_image = tf.reshape(tf.slice(data, [1], [32323]), [3, 32, 32])
image = tf.cast(tf.transpose(raw_image, [1, 2, 0]), tf.float32)

lr_image = tf.image.random_flip_left_right(image)
br_image = tf.image.random_brightness(lr_image, max_delta=63)
rc_image = tf.image.random_contrast(br_image, lower=0.2, upper=1.8)

std_image = tf.image.per_image_standardization(rc_image)
training_images, training_labels = tf.train.batch([std_image, label],batch_size=10000,capacity=50000)#num_threads=16,)
train=[]
tr_label=[]
sess = tf.Session()
sess.run(tf.local_variables_initializer())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess,coord=coord)
try:
while not coord.should_stop():
train_imgs, train_labs=sess.run([training_images, training_labels])
print(training_images, training_labels)#,train,tr_label)
except tf.errors.OutOfRangeError:
print(“complete”)
finally:
coord.request_stop()
coord.join(threads)
sess.close()
要知道cifar10的training文件中只有50000个图片,我这里batch size是10000,那么应该5次就能读取完,但事实上,他在无限循环,跑出来的结果如下:
在这里插入图片描述代码我是根据这两个帖子更改的:
https://blog.csdn.net/zzk1995/article/details/54292859
https://blog.csdn.net/liweibin1994/article/details/78306417

有的说是需要加local_variable_initializer,加上了也没有用
后来又看了一遍tensorflow数据读取机制,发现在tf.train.string_input_producer里可以设置num_epochs=1,num_epochs参数传入的是epoch数,即将传入的list全部运算几遍,像我这个情况就应该让其=1。另备注:shuffle参数决定在一个epoch内,文件的顺序是否被打乱,若shuffle=False,则不打乱,否则打乱,默认是打乱的。
改了之后就没问题啦~。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值