正如提到的这个帖子,Dataset.map
不支持并行在tf.py_func
地图中的函数调用(该tf.py_func
部分将顺序执行)。
有没有解决此问题的方法?通常情况下,输入管道需要复杂的python控制流和张量流中不存在的操作。过去,我曾经使用python库实现自己的队列和预处理线程,但是使用便捷的tf.data
接口能够做到这一点将非常方便。
我有一个大约有1000万行的mysql表。对于每一行,我都有一个id
列和一个date
列。该id
列不是唯一的,对于一个id
列,有多行具有不同的值date
,通常每行3-6个日期id
。我想选择与最新的行date
为他们id
。
我的查询:
SELECT id,
date
FROM tab a
WHERE a.date = (SELECT MAX(date)
FROM tab b
WHERE a.id=b.id)
Run Code Online (Sandbox Code Playgroud)
非常慢,需要几分钟才能完成。感觉这可以更快地完成。这里的最佳做法是什么?
Variable
当我使用整数张量初始化该操作时,似乎没有该操作的 GPU 内核。例如,运行:
with tf.device('/gpu:0'):
var = tf.Variable(initial_value=([[1,2],[3,4]]))
sess = tf.Session()
sess.run(var)
Run Code Online (Sandbox Code Playgroud)
会导致异常:
tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'Variable': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available
Run Code Online (Sandbox Code Playgroud)
这是否意味着 TensorFlow 中的所有变量都存储在与 CPU 设备关联的内存(我猜是 RAM)上,而不是存储在 GPU 内存上?当我们只使用一个 GPU 来训练模型时,是不是会更慢,因为变量值必须从 RAM 复制到 GPU 内存多次?
谢谢!