我正在尝试在GPU上运行一些回归模型。虽然我得到了非常低的GPU利用率,但高达20%。看完代码后,
for i in range(epochs):
rand_index = np.random.choice(args.train_pr,
size=args.batch_size)
rand_x = X_train[rand_index]
rand_y = Y_train[rand_index]
我使用这三行代码为每次迭代选择一个随机批次。因此,我想问培训何时进行,是否可以为下一次迭代准备更多批次?
我正在研究回归问题,而不是分类问题。我已经在Tensorflow中看到了线程,但是只找到了图像的示例,没有用于训练的大小为100000X1000的大矩阵的示例。
最佳答案
您的主机内存中有一个大的numpy数组。您希望能够在CPU上并行处理并将批次发送到设备。
从TF 1.4开始,最好的方法是使用tf.data.Dataset
,尤其是tf.data.Dataset.from_tensor_slices
。但是,正如the documentation指出的那样,您可能不应该将numpy数组作为此函数的参数提供,因为它最终将被复制到设备内存中。相反,您应该使用占位符。文档中给出的示例非常不言自明:
features_placeholder = tf.placeholder(features.dtype, features.shape)
labels_placeholder = tf.placeholder(labels.dtype, labels.shape)
dataset = tf.data.Dataset.from_tensor_slices((features_placeholder, labels_placeholder))
# [Other transformations on `dataset`...]
iterator = dataset.make_initializable_iterator()
sess.run(iterator.initializer, feed_dict={features_placeholder: features,
labels_placeholder: labels})
可以使用
.map
方法将进一步的预处理或数据增强应用于切片。为了确保这些操作同时发生,请确保仅使用tensorflow操作,并避免将python操作与tf.py_func
包装在一起。关于python - 在Tensorflow中批量读取numpy矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45201195/