Python 基于GPU的慢张量流训练与评价

Python 基于GPU的慢张量流训练与评价,python,tensorflow,gpu,evaluation,Python,Tensorflow,Gpu,Evaluation,所以我正在做一些研究,有很多关于两个人一起在一个房间里移动物体的速度和加速度数据。在此之前,我已经使用LSTM和RNN成功地训练了一个时间序列预测神经网络,以预测未来一个时间步内物体的速度 训练完这个神经网络后,我对它进行了扩充,使用预测和以前的数据,预测未来的另一个时间步,依此类推一定数量的时间步。我已经包括了一张这是什么样子的图片。基本上,我使用以前的数据(大小为N个时间步乘以M个输入)预测一个步骤,然后将此预测添加到输入的末尾,删除输入的第一个时间步(以保持大小为nx M),然后再次训练下

所以我正在做一些研究,有很多关于两个人一起在一个房间里移动物体的速度和加速度数据。在此之前,我已经使用LSTM和RNN成功地训练了一个时间序列预测神经网络,以预测未来一个时间步内物体的速度

训练完这个神经网络后,我对它进行了扩充,使用预测和以前的数据,预测未来的另一个时间步,依此类推一定数量的时间步。我已经包括了一张这是什么样子的图片。基本上,我使用以前的数据(大小为N个时间步乘以M个输入)预测一个步骤,然后将此预测添加到输入的末尾,删除输入的第一个时间步(以保持大小为nx M),然后再次训练下一个时间步,直到我有P个未来预测与测量数据进行比较

这是我的变量

x = tf.placeholder(tf.float32,[None, n_steps, n_inputs])
y = tf.placeholder(tf.float32,[None, n_outputs])
W = {'hidden': tf.Variable(tf.random_normal([n_inputs, n_nodes])),
'output': tf.Variable(tf.random_normal([n_nodes,n_outputs]))}
bias = {'hidden': tf.Variable(tf.random_normal([n_nodes],mean= 1.0)),
'output': tf.Variable(tf.random_normal([n_outputs]))
这是我的模型

def model(x,y,W,bias):
x = tf.transpose(x,[1,0,2])
x = tf.reshape(x,[-1,n_inputs])
x = tf.nn.relu(tf.matmul(x,W['hidden']) + bias['hidden'])
x = tf.split(x,n_steps,0)
cells = []
for _ in xrange(n_layers):
    lstm_cell = rnn.BasicLSTMCell(n_nodes, forget_bias = 1.0, state_is_tuple = True)
    cells.append(lstm_cell)
lstm_cells = rnn.MultiRNNCell(cells,state_is_tuple = True)
outputs,states = rnn.static_rnn(lstm_cells, x, dtype = tf.float32)
output = outputs[-1]
return tf.matmul(output, W['output') + bias['output']
所以我有两个问题:

1] 当我训练这个NN时,我使用的是一个TitanX GPU,它比我的CPU花费的时间要长。我在某处读到,这可能是由于LSTM细胞的性质。这是真的吗?如果是这样的话,我有没有办法让这个网络的训练在我的GPU上进行得更快,或者我只是被它拖得太慢了

2] 训练完成后,我想用真实数据实时运行预测。不幸的是,使用sess.run(prediction,feed_dict)即使一次也需要0.05秒。如果我想得到不止一个未来的预测步骤,比如说10个未来的预测步骤,那么运行一个循环来获得10个预测将需要0.5秒,这对于我的应用程序来说是不现实的。有什么原因需要花这么长时间来评估吗?我已经试着减少时间步数(n_步数),以及未来要预测的步数,这似乎减少了预测所需的时间。但我觉得这只会影响训练时间,因为在评估时,NN已经训练了所有东西,应该只是通过GPU死记硬背数字。有什么想法吗?

关于问题1: 并非所有NN都能从使用GPU中获益。当有大量乘法运算可以并行化时,GPU是很好的。因此,他们非常擅长运行卷积神经网络。然而,当涉及到RNN时,CPU是最好的选择。如果您有足够的资源,可以使用GoogleCloudML引擎,在CPU集群上运行它

关于问题2: 使用sess.run()时,TensorFlow的开销很大。然而,我认为在上一个版本中,他们引入了一些功能来将网络转换为可执行文件。但是需要更好的意见。

关于问题1: 并非所有NN都能从使用GPU中获益。当有大量乘法运算可以并行化时,GPU是很好的。因此,他们非常擅长运行卷积神经网络。然而,当涉及到RNN时,CPU是最好的选择。如果您有足够的资源,可以使用GoogleCloudML引擎,在CPU集群上运行它

关于问题2: 使用sess.run()时,TensorFlow的开销很大。然而,我认为在上一个版本中,他们引入了一些功能来将网络转换为可执行文件。尽管如此,还是需要一个更好的意见