2016-07-06 114 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}) 

您可能想要編寫一些隨機遍歷所有數據的更復雜的代碼,但會跟蹤哪些批次已被使用,因此您不會比其他批次更頻繁地使用任何批次。一旦完成了訓練集的全部運行,您可以再次啓用所有批次並重復。