将大的numpy数组馈送到tensorflow

时间:2018-01-08 17:11:14

标签: python numpy tensorflow

我有一个大的numpy数组(X)我可以加载到CPU上,但它对于GPU / Tensorflow来说太大了。我想使用tensorflow在X上执行数组操作,所以我将数组拆分成批(使用numpy),将其提供给tensorflow,然后最终连接最终输出数组以给我numpy数组Y.我是tensorflow的新手,所以我认为应该有更好/更快的方式来输入numpy数组。

#X is a large numpy array
#batches is an integer which defines the number of batches

X_list = np.array_split(X,batches)

X_tf = tf.placeholder(tf.float32)
Y_tf = some_function(X_tf)

for batch in range(batches):
    sess = tf.Session()
    sess.run(init)
    Y_list.append(sess.run(Y_tf, feed_dict={X_tf: X_list[batch]}))
    sess.close()

Y = np.hstack(Y_list)

2 个答案:

答案 0 :(得分:1)

您应该查看tensorflow dataset类,因为它具有处理大型np数组的能力。只要数组可以适合内存,就可以根据需要加载和批处理。

基本实现看起来像(更详细here

#load np array X 

#make placeholders for dataset    
X_placeholder = tf.placeholder(dtype=tf.float32, shape=X.shape)    

#make data set from placeholders    
dataset = Dataset.from_tensor_slices((X_placeholder)) 

#batch
dataset = dataset.batch(batch_size)  

答案 1 :(得分:0)

占位符方法大大降低了将数据馈送到系统的速度,甚至高达32%。有关此内容的详细说明,建议阅读以下出色的课程笔记:lecture 03。理想的情况是不使用占位符,但是,因为您的数据集很大,所以您可以碰到

  tf.GraphDef协议缓冲区的

2GB限制。 here