我有一個大小爲(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'? –