3d卷积张量流float64

时间:2018-07-18 14:59:46

标签: python tensorflow gpu

我正在Tensorflow上进行一些卷积计算,并且在使用Double Precision数字时遇到了一些奇怪的错误。

由于精度问题,我需要在float64中计算那些张量。

conv3d在float32上可以很好地工作,但是在Double precision上,它只能在CPU上使用,而对于GPU,错误提示

InvalidArgumentError (see above for traceback): Cannot assign a device for operation 'Conv3D': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available.
Registered kernels:
  device='CPU'; T in [DT_HALF]
  device='CPU'; T in [DT_FLOAT]
  device='CPU'; T in [DT_DOUBLE]
  device='GPU'; T in [DT_HALF]
  device='GPU'; T in [DT_FLOAT]

 [[Node: Conv3D = Conv3D[T=DT_DOUBLE, data_format="NDHWC", dilations=[1, 1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1, 1], _device="/device:GPU:0"](Const, Const_1)]]

下面是我的测试代码。

import tensorflow as tf
import numpy as np

with tf.device('/device:GPU:0'):

    a = tf.constant(2 * np.ones([1, 200, 200, 200, 9], dtype=np.float64), dtype=tf.float64)

    b = tf.constant(np.ones([3, 3, 3, 9, 9], dtype=np.float64), dtype=tf.float64)


    sess = tf.Session()

    init = tf.global_variables_initializer()

    sess.run(init)


    c = tf.nn.conv3d(a, b, strides=[1, 1, 1, 1, 1], padding='SAME')
    print(a)
    print(b)
    print(c)
    for i in range(1000):
        print(sess.run(c))

有什么方法可以将gpu用于这些操作吗?

1 个答案:

答案 0 :(得分:0)

对GPU的双精度支持取决于硬件。快速搜索品牌和型号以及“支持双精度”将为您解答GPU是否可以支持双精度数学。

快速搜索我的GPU(gtx 1060)及其对双精度的支持导致出现以下链接: https://devtalk.nvidia.com/default/topic/995849/does-the-gtx1060-support-double-precision-/

对于gtx 1060,双精度数学的吞吐量是单精度数学的1/32。因此,即使您的GPU支持它,性能仍然无法满足您的期望。