在theano中获得softmax和交叉熵的误差

时间:2015-02-09 20:34:09

标签: python theano softmax

我正在与Theano实施DNN。在DNN的最后一层,我使用softmax作为theano.tensor.nnet.softmax

的非线性函数

作为一个丢失的函数,我正在使用来自T.nnet.binary_crossentropy的交叉熵 但我得到一个奇怪的错误: “编译节点时出现以下错误',GpuDnnSoftmaxGrad {tensor_format ='bc01'...”

我是theano的新手,无法弄清楚这个型号有什么问题。非常感谢您的帮助 PS:我的猜测是它与softmax采用2D张量并返回2D张量这一事实有某种关系。

PS2:我正在使用最前沿的Theano(刚刚克隆)我的CUDA版本已经老了它是4.2但是我几乎可以肯定这不是问题,因为我在没有错误的情况下使用其他基于DNN编写的工具Theano。 我正在使用pylearn2来加速,这不是问题,因为我已经成功使用了当前Theano和CUDA在另一个DNN中。

此行发生错误:train= theano.function([idx], train_loss, givens=givens, updates=updates)

完整的错误消息是: cmodule.py", line 293, in dlimport rval = __import__(module_name, {}, {}, [module_name]) RuntimeError: ('The following error happened while compiling the node', GpuDnnSoftmaxGrad{tensor_format='bc01', mode='channel', algo='accurate'}(GpuContiguous.0, GpuContiguous.0), '\n', 'could not create cuDNN handle: The handle was not initialized(Is your driver recent enought?).', "[GpuDnnSoftmaxGrad{tensor_format='bc01', mode='channel', algo='accurate'}(<CudaNdarrayType(float32, (False, False, True, True))>, <CudaNdarrayType(float32, (False, False, True, True))>)]")

我正在使用的交叉熵函数定义为: error = T.mean(T.nnet.binary_crossentropy(input, target_y) 其中input是softmax图层的输出,target_y是标签。

1 个答案:

答案 0 :(得分:0)

解决。我不得不使用T.nnet.categorical_crossentropy,因为我的目标变量是一个整数向量。