Tensorflow Python中的自定义损失函数

时间:2018-10-31 18:16:57

标签: python tensorflow

我正在尝试在自己的自定义损失函数上运行梯度下降(或其他优化器算法)。目的是找到导致损失最小的输入数字。

我有一个使用常规python代码的自定义损失函数,张量流tf.multiply()和tf.square()函数

#inputs is a 6-element number array, getLoss returns a number
def getLoss(inputs):
  val1 = inputs[0]
  val2 = inputs[1]
  val3 = inputs[2]
  val4 = inputs[3]
  val5 = inputs[4]
  val6 = inputs[5]
  ...
  <a bunch of physics calculations and for loops>
  ...
  return loss

我一直在尝试运行以下代码:

w = tf.Variable(np.random.rand(6), name="w")
error = getLoss(w)
train_op = tf.train.GradientDescentOptimizer(0.01).minimize(error)
model = tf.global_variables_initializer()

with tf.Session() as session:
  session.run(model)
  w_value = session.run(w)
  print(w_value)

但这给我一个错误

slice index 2 of dimension 0 out of bounds. for 'strided_slice_14' (op: 'StridedSlice') with input shapes: [2], [1], [1], [1] and with computed input tensors: input[1] = <2>, input[2] = <3>, input[3] = <1>.
我假设的

是使用tf.Variable()而不是np.array()的结果。我对tensorflow非常陌生,所以我预计可能会出现多个错误。如果有人可以向我展示优化这些变量的最佳方法,我将不胜感激。预先感谢!

编辑: xdurch0通过让我知道我正在使用[1.0,6.0](代码中固定)制作两个元素的数组来纠正了第一个错误。但是主要问题仍然存在,并带有其他错误消息:

TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.

因为在getLoss代码中只有一点,所以我使用

if(inputs[0] > constVal):
  ...

我必须在自定义损失函数中使用tf.cond函数吗?另外,在这种情况下如何正确使用tf.cond?

0 个答案:

没有答案