2016-07-06 110 views

回答

8

您可以将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, :, :, :]}) 
+0

谢谢。但是当训练迭代“i”的数目很大时,例如100000,如何喂它? –

+0

如果你只有'21760'训练样本,你只有'21760/128'不同的小批量。您必须围绕'i'循环编写一个外部循环,并在训练数据集上运行多个时期。 – keveman

+0

我有一点困惑。当原始数据被洗牌并提取小批量时,是否意味着小批量的数量超过了'21760/128'? –

1

如果你的数据集是如此之大,它不能被导入到记忆像是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}) 

您可能想要编写一些随机遍历所有数据的更复杂的代码,但会跟踪哪些批次已被使用,因此您不会比其他批次更频繁地使用任何批次。一旦完成了训练集的全部运行,您可以再次启用所有批次并重复。