将大的numpy数组馈送到tensorflow

问题描述 投票:0回答:2

我有一个大的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)
python numpy tensorflow
2个回答
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)  

0
投票

占位符方法大大降低了数据输入系统的速度,甚至高达32%。有关这方面的更详细解释,我建议您阅读这篇精彩的课程笔记:lecture 03。但理想的情况是不使用占位符,因为您的数据集很大,您可以遇到占位符

tf.GraphDef协议缓冲区的2GB限制。 here

© www.soinside.com 2019 - 2024. All rights reserved.