我有一个大小为(21760, 1, 33, 33)
的hdf5培训数据集。 21760
是训练样本的总数。我想使用大小为128
的小批量训练数据来训练网络。如何在一个hdf5数据文件中读取批次进行培训?
我要问:
如何从整个数据集tensorflow每次喂128
小批量的训练数据?
我有一个大小为(21760, 1, 33, 33)
的hdf5培训数据集。 21760
是训练样本的总数。我想使用大小为128
的小批量训练数据来训练网络。如何在一个hdf5数据文件中读取批次进行培训?
我要问:
如何从整个数据集tensorflow每次喂128
小批量的训练数据?
您可以将hdf5数据集读入numpy数组,并将numpy数组的切片供给TensorFlow模型。像下面的伪代码将工作:
import numpy, h5py
f = h5py.File('somefile.h5','r')
data = f.get('path/to/my/dataset')
data_as_array = numpy.array(data)
for i in range(0, 21760, 128):
sess.run(train_op, feed_dict={input:data_as_array[i:i+128, :, :, :]})
如果你的数据集是如此之大,它不能被导入到记忆像是keveman建议,您可以直接使用的h5py对象:
import h5py
import tensorflow as tf
data = h5py.File('myfile.h5py', 'r')
data_size = data['data_set'].shape[0]
batch_size = 128
sess = tf.Session()
train_op = # tf.something_useful()
input = # tf.placeholder or something
for i in range(0, data_size, batch_size):
current_data = data['data_set'][position:position+batch_size]
sess.run(train_op, feed_dict={input: current_data})
您也可以通过迭代的数量庞大的运行,并随机选择一个批次,如果你想:
import random
for i in range(iterations):
pos = random.randint(0, int(data_size/batch_size)-1) * batch_size
current_data = data['data_set'][pos:pos+batch_size]
sess.run(train_op, feed_dict={inputs=current_data})
或顺序:
for i in range(iterations):
pos = (i % int(data_size/batch_size)) * batch_size
current_data = data['data_set'][pos:pos+batch_size]
sess.run(train_op, feed_dict={inputs=current_data})
您可能想要编写一些随机遍历所有数据的更复杂的代码,但会跟踪哪些批次已被使用,因此您不会比其他批次更频繁地使用任何批次。一旦完成了训练集的全部运行,您可以再次启用所有批次并重复。
谢谢。但是当训练迭代“i”的数目很大时,例如100000,如何喂它? –
如果你只有'21760'训练样本,你只有'21760/128'不同的小批量。您必须围绕'i'循环编写一个外部循环,并在训练数据集上运行多个时期。 – keveman
我有一点困惑。当原始数据被洗牌并提取小批量时,是否意味着小批量的数量超过了'21760/128'? –