其实关于读取数据实现batch和epoch我一些疑问
tensorflow吧
全部回复
仅看楼主
level 7
首先假设数据样本总数是10000,我设置batchsize为128,epoch为100,那么按照定义就是每次训练一步会有128个样本喂给网络,那么10000/128并不能得到一个epoch所包含的整数个步长。当然也有看到不用epoch这个概念,直接说训练多少步(batch),但是这样就存在问题,如果采用shuffle那么有的数据会被读取很多次有的则不会被读取。还有就是即使样本总数能被batchsize整除,那么要如何用队列读取(采用shuffle)实现一个epoch,既然是随机读取的,怎样保证一个epoch内所有数据都恰好被读取一次?这些问题困扰好久了,网上有些答案但都没有正面回答[阴险]
2018年05月06日 16点05分 1
level 1
楼主解决了吗?我也有这个疑问[阴险]
2018年06月14日 11点06分 2
其实看到最后我也打算回避这个问题了,直接用循环吧,batchsize乘以循环次数等于样本数,就当一个epoch了,其实我怀疑那个读取线程会不会自己内部解决了这个问题,
2018年06月14日 11点06分
@我比安娜可爱吧 嗯嗯,其实回避影响也不是很大。完全可以找个整数,为啥咱非要纠结不整除呢[笑尿]
2018年06月14日 12点06分
回复 索隆_D_路飞 :主要是看了一些教程案例都习惯拿二的整数幂当batch
2018年06月14日 12点06分
level 1
今天正好也纠结这个问题,然后上网查了一下。
image_batch, label_batch = tf.train.shuffle_batch([img, label], batch_size=batchSize, capacity=capacity,
min_after_dequeue=min_after_dequeue)
这是个得到batch的函数,其中的allow_smaller_final_batch可选。
True就是允许最后得到的batch小于batchsize,FALSE就丢弃了这部分数据。
2018年09月26日 06点09分 3
允许batchsize小于batchsize感觉就有另一个问题,如果网络中定义了batchsize这一维是不是就不匹配了,不过我现在改用dataset来读取数据了,这个问题我也直接回避了
2018年09月26日 07点09分
level 1
def imageToTensor(file):
binary = tf.gfile.FastGFile(file, 'rb').read()
return tf.image.decode_image(binary)
def getTrainData(start, end):
data = []
label = []
for i in range(start, end + 1, 1):
data.append(imageToTensor('cat/' + str(i + 1) + '.png'))
label.append(tf.constant(1))
data.append(imageToTensor('dog/' + str(i + 1) + '.png'))
label.append(tf.constant(0))
return data, label
(data, label) = getTrainData(1, 170000)
请问这样读数据内存不够,怎么拆开来?
2018年09月27日 12点09分 4
level 1
插个眼,楼主解决了吗.时间跨度有点大[乖]
2021年06月22日 07点06分 5
https://blog.csdn.net/lujiandong1/article/details/53991373 这个博客可以解决一些问题,开始我代码打错了,一直不成功
2021年06月22日 08点06分
其实不太算一个问题,因为当你的数据量上千万以后,每一次batch就算最后一次舍弃了一些数据(不能被整除的)也不要紧,因为数据量过于庞大,几个数据不足为据。况且你还有不止一个epoch呢。
2021年06月30日 02点06分
1