我有一个大的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)
答案 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