我需要优化tensorflow调用

我需要优化tensorflow调用,tensorflow,Tensorflow,我正在用tensorflow的Python API编写一个强化学习代理。在执行过程中,我需要调用tensorflow数百万次,以评估从外部tensorflow提供的张量(无需任何训练),而且我更不需要发送大量训练集。每个求值调用都需要超过1毫秒的时间(GPU GTX 970,i7-4790K CPU),加起来它们占用了我代码运行时间的一半以上。我想知道我是否可以减少tensorflow在没有培训的情况下评估数据所需的时间,或者减少调用tensorflow的开销 可能会减慢整个评估过程的是,我使用

我正在用tensorflow的Python API编写一个强化学习代理。在执行过程中,我需要调用tensorflow数百万次,以评估从外部tensorflow提供的张量(无需任何训练),而且我更不需要发送大量训练集。每个求值调用都需要超过1毫秒的时间(GPU GTX 970,i7-4790K CPU),加起来它们占用了我代码运行时间的一半以上。我想知道我是否可以减少tensorflow在没有培训的情况下评估数据所需的时间,或者减少调用tensorflow的开销

可能会减慢整个评估过程的是,我使用两个输入,在应用一些密集层之前,我对一个应用卷积层,然后使用tf.concat对另一个应用concat。这会使评估过程特别缓慢吗

一些示例代码:

    x1 = tf.placeholder(tf.float32, shape=[None, self.conv_size_0*self.conv_size_1], name="x1")
    x2 = tf.placeholder(tf.float32, shape=[None, self.noconv_size], name="x2")
    y_ = tf.placeholder(tf.float32, shape=[None, 1])

    # Convolution in 1D image of length self.conv_size_0 and number of channels self.conv_size_1 (defined during graph creation, and then fixed)

    x_image = tf.reshape(x1,[-1,self.conv_size_0,1,self.conv_size_1])

    W_conv1 = weight_variable([3, 1, self.conv_size_1, self.conv_depth])
    b_conv1 = bias_variable([self.conv_depth])

    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)

    # Concatenating 
    x1convsize = self.conv_depth*self.conv_size_0
    x1conv = tf.reshape(h_conv1,[-1,x1convsize])

    sa_size = x1convsize + self.noconv_size
    x = tf.concat([x1conv,x2],1)

    # Here I ommited code defining some dense layers acting on x
    y_f = ...

    predDiff = tf.subtract(y_f,y_)
    loss = tf.nn.l2_loss(predDiff)      
    train_step = tf.train.AdamOptimizer(5e-4).minimize(loss)
然后,为了评估我的函数,我调用了数百万次:

[Q] = sess.run([self.y_f], feed_dict={
        self.x1: x1, self.x2: x2, self.keep_prob: 1.0})

一些代码会促使读者给出他们的输入:)使用时间线查看哪个块花费的时间更长: