当尝试像预期的那样使用tf.maximum
时:
loss = tf.maximum(0, basic_loss)
此错误已获得
-------------------------------------------------- ---------------------------- ValueError Traceback(最近的呼叫 持续) /opt/conda/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py 在apply_op(self,op_type_name,name,**关键字)中 第489章 -> 490 preferred_dtype = default_dtype) 491,除了TypeError作为err:
/opt/conda/lib/python3.6/site-packages/tensorflow/python/framework/ops.py 在internal_convert_to_tensor(value,dtype,name,as_ref, preferred_dtype) 740如果ret为None: -> 741 ret = conversion_func(值,dtype = dtype,name = name,as_ref = as_ref) 742
/opt/conda/lib/python3.6/site-packages/tensorflow/python/framework/ops.py 在_TensorTensorConversionFunction(t,dtype,name,as_ref)中 613“具有dtype%s的张量的张量转换请求dtype%s:%r” -> 614%(dtype.name,t.dtype.name,str(t))) 615返回t
ValueError:Tensor转换请求Tensor具有dtype int32 dtype float32:'Tensor(“ add_13:0”,shape =(),dtype = float32)'
在处理上述异常期间,发生了另一个异常:
TypeError跟踪(最近的呼叫 最后)在() 5 tf.random_normal([3,128],均值= 1,stddev = 1,种子= 1), 6 tf.random_normal([3,128],平均值= 3,stddev = 4,种子= 1)) ----> 7损失= Triplet_loss(y_true,y_pred) 8 9 print(“ loss =” + str(loss.eval()))
in Triplet_loss(y_true,y_pred,alpha) 26 basic_loss = pos_dist-neg_dist + alpha 27#步骤4:取basic_loss和0.0的最大值。总结训练示例。 ---> 28损失= tf.maximum(0,basic_loss) 29 ###此处结束代码### 30
/opt/conda/lib/python3.6/site-packages/tensorflow/python/ops/gen_math_ops.py 最大(x,y,name)1261 A
Tensor
。与...具有相同的类型x
。 1262“”“ -> 1263结果= _op_def_lib.apply_op(“最大值”,x = x,y = y,name = name)1264返回结果1265/opt/conda/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py 在apply_op(self,op_type_name,name,**关键字)中 524“%s输入了参数'%s'的%s。” % 525(前缀,dtypes.as_dtype(attrs [input_arg.type_attr])。name, -> 526从[input_arg.type_attr])推断) 527 528种= [values.dtype]
TypeError:“最大”操作的输入“ y”的类型为float32 匹配参数'x'的类型int32。
问题出在哪里?
答案 0 :(得分:1)
The tensor flow doc没有声明maximum
函数是不可交换的。
仅当第一个参数的类型为Tensor时才有效,但如果其类型为int则无效。
需要使用常量参数的替换位置来调用此函数:
tf.maximum(basic_loss, 0)
代替
tf.maximum(0, basic_loss)