【问题标题】:Theano: ifelse TypeErrorTheano: ifelse 类型错误
【发布时间】:2016-07-07 20:05:51
【问题描述】:

我正在尝试运行脚本 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, scalar) 和 TensorType(float32, scalar)。例如,如果您在 then 分支上提供了一个元素列表,但在 else 分支上提供了张量,则可能会引发此错误

请问如何解决这个错误?谢谢

【问题讨论】:

    标签: python theano


    【解决方案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.)
    

    所以两个值具有相同的类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-19
      • 2014-05-19
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 2016-02-03
      相关资源
      最近更新 更多