在TensorFlow中运行random_ops,会发生TypeError

时间:2016-08-11 09:23:48

标签: tensorflow

在RMSProp Optimizer tensorflow\python\training\rmsprop.py中,我尝试将随机噪声引入算法。

所以我调用了rnd = random_ops.random_normal()来返回随机值。但是,当我运行training_ops.apply_rms_prop(...., rnd, ...).op时,TypeError会发生:

  

TypeError: Input 'rnd' of Op requires l-value input

然后追溯到tensorflow\python\framework\op_def_library.py中的TypeError

  

if not all(x.is_ref_dtype for x in types):

     
    

raise TypeError(

         
      

"Input '%s' of '%s' Op requires l-value input" % (input_name, op_type_name))

    
  

我认为这是因为random_ops.random_normal()的输出不是ApplyRMSProp Op的引用类型 。所以我的问题是如何将其转换为引用DType?

请注意,在tensorflow\python\training\rmsprop.py中,参数将转换为非参考DType

  

math_ops.cast(self._learning_rate_tensor, var.dtype.base_dtype)

所以也许我可以在as_ref中尝试tensorflow\python\framework\dtypes.py功能,例如

  

math_ops.cast(rnd, var.dtype.as_ref)

1 个答案:

答案 0 :(得分:0)

<%= link_to 'download', asset_path('/docs/Физика.pdf') %> 会返回张量,而random_ops.random_normal()需要Variable object。所以我通过

导入变量ops
  

training_ops.apply_rms_prop(...., rnd, ...).op

并构建from tensorflow.python.ops import variables的{​​{1}}。毕竟,它有效。