没有注册 OpKernel 以支持具有这些属性的 Op 'Conv2D'

Posted

技术标签:

【中文标题】没有注册 OpKernel 以支持具有这些属性的 Op \'Conv2D\'【英文标题】:No OpKernel was registered to support Op 'Conv2D' with these attrs没有注册 OpKernel 以支持具有这些属性的 Op 'Conv2D' 【发布时间】:2017-05-09 16:50:57 【问题描述】:

对此的新手可能有些愚蠢,但无法让 conv2d 运行


Windows 10

anaconda 4.2.13

python 3.5.2

C:\windows\system32>nvcc --version nvcc:NVIDIA (R) Cuda 编译器驱动程序 版权所有 (c) 2005-2016 NVIDIA Corporation 建于 Sat_Sep__3_19:05:48_CDT_2016 Cuda 编译工具,8.0 版,V8.0.44

cudnn 5.1

TensorFlow 0.12


import numpy as np
import tensorflow as tf

graph1 = tf.Graph()
with graph1.as_default():
    f=tf.constant(   np.ones(10).reshape(1,1,-1,1)   )
    g=tf.constant(   np.ones(3).reshape(1,-1,1,1)   )
    conv1=tf.nn.conv2d( f,g, strides=[1,1,1,1] , padding="SAME",name="conv1")

with tf.Session(graph=graph1) as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(f))
    print(sess.run(g))
    print(sess.run(conv1))
    sess.close()

结果:

InvalidArgumentError (see above for traceback): No OpKernel was registered to support Op 'Conv2D' with these attrs.  Registered devices: [CPU,GPU], Registered kernels:
  device='CPU'; T in [DT_HALF]
  device='CPU'; T in [DT_FLOAT]
  device='GPU'; T in [DT_HALF]
  device='GPU'; T in [DT_FLOAT]

    [[Node: conv = Conv2D[T=DT_DOUBLE, data_format="NHWC", padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true](Const, Const_1)]]

【问题讨论】:

【参考方案1】:

你应该把两行改为

f=tf.constant(   np.ones(10).reshape(1,1,-1,1).astype(np.float32)   )
g=tf.constant(   np.ones(3).reshape(1,-1,1,1).astype(np.float32)   )

否则这些节点采用默认的 numpy 类型 float64,它没有 Conv2D 内核

【讨论】:

谢谢!我花了太长时间,但文档说它在 tensorflow 网站上需要 64 位。 你说得对,有点乱,发github.com/tensorflow/tensorflow/pull/6485修复

以上是关于没有注册 OpKernel 以支持具有这些属性的 Op 'Conv2D'的主要内容,如果未能解决你的问题,请参考以下文章

没有注册 OpKernel 以在 iOS 上使用这些属性支持 Op'Switch'

InvalidArgumentError:没有注册 OpKernel 来支持 Op 'CudnnRNN'

OneFlow源码解析:OpKernel与解释器

AutoMapper 具有未映射属性的问题

OneFlow学习笔记:从OpExprInterpreter到OpKernel

Spring Cloud Schema Registry