首页 文章

Theano:ifelse TypeError

提问于
浏览
3

我试图运行脚本lstm_ptb.py但它为以下行抛出一个TypeError:

shrink_factor = ifelse(T.gt(norm_gparams,max_grad_norm),max_grad_norm/norm_gparams,1.)

这就是这条线试图实现的目标:

if norm_gparams > max_grad_norm: 
    shrink_factor = max_grad_norm/norm_gparams
 else:
    shrink_factor = 1.

它说:

TypeError:两个分支应该具有相同的类型,但它们分别是TensorType(float64,标量)和TensorType(float32,标量) . 如果您在then分支上提供了一个元素列表但在else分支上提供了一个张量,则可能会引发此错误

请问如何解决错误?谢谢

1 回答

  • 1

    你的问题是 1.else 部分引起的 . 默认情况下,它指定为 float32 类型 . 你只需要转换它:

    shrink_factor = ifelse(T.gt(norm_gparams,max_grad_norm),max_grad_norm/norm_gparams,np.float64(1.))
    

    或转换 max_grad_norm/norm_gparams 值:

    shrink_factor = ifelse(T.gt(norm_gparams,max_grad_norm),(max_grad_norm/norm_gparams).astype('float32'),1.)
    

    所以这两个值都有相同的类型

相关问题