ScipyOptimizerInterfaceを使用していくつかの関数を最適化しようとしています。私は次のコードスニペット(テンソルフローのドキュメントから少し修正したもの)を実行して、それがどのように動作するかについていくつかのアイデアを得ようとしました。テンソルフローでScipyOptimizerInterfaceを使用した場合のTypeError
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-27-e81545f4bb15> in <module>()
4 loss = tf.reduce_sum(tf.square(vector))
5
----> 6 optimizer = tf.contrib.opt.ScipyOptimizerInterface(loss, options={'maxiter': 100})
7
8 with tf.Session() as session:
/s/anaconda/....../miniconda2/lib/python2.7/site-packages/tensorflow/contrib/opt/python/training/external_optimizer.pyc in __init__(self, loss, var_list, equalities, inequalities, var_to_bounds, **optimizer_kwargs)
124 self.optimizer_kwargs = optimizer_kwargs
125
--> 126 self._packed_var = self._pack(self._vars)
127 self._packed_loss_grad = self._pack(loss_grads)
128 self._packed_equality_grads = [
/s/anaconda/...../miniconda2/lib/python2.7/site-packages/tensorflow/contrib/opt/python/training/external_optimizer.pyc in _pack(cls, tensors)
257 else:
258 flattened = [array_ops.reshape(tensor, [-1]) for tensor in tensors]
--> 259 return array_ops.concat(flattened, 0)
260
261 def _make_eval_func(self, tensors, session, feed_dict, fetches,
/s/anaconda/...../miniconda2/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.pyc in concat(values, axis, name)
1064 return gen_array_ops._concat_v2(values=values,
1065 axis=axis,
-> 1066 name=name)
1067
1068
/s/anaconda/...../miniconda2/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.pyc in _concat_v2(values, axis, name)
493 """
494 result = _op_def_lib.apply_op("ConcatV2", values=values, axis=axis,
--> 495 name=name)
496 return result
497
/s/anaconda/...../miniconda2/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.pyc in apply_op(self, op_type_name, name, **keywords)
461 (prefix, dtype.name))
462 else:
--> 463 raise TypeError("%s that don't all match." % prefix)
464 else:
465 raise TypeError("%s that are invalid." % prefix)
TypeError: Tensors in list passed to 'values' of 'ConcatV2' Op have types [float64, float32, float32, float32, float32, float32, float32, float32, float32, float64, float64, float32, float32, float32, float32, float32, float32, float32, float32, float32, float64, float32, float32] that don't all match.
私は連続Analyticsの1.3.0-RC0とのpython 2.7.12 tensorflowを使用しています:
vector = tf.Variable([7., 7.], 'vector')
# Make vector norm as small as possible.
loss = tf.reduce_sum(tf.square(vector))
optimizer = tf.contrib.opt.ScipyOptimizerInterface(loss, options={'maxiter': 100})
with tf.Session() as session:
optimizer.minimize(session)
# The value of vector should now be [0., 0.].
は、しかし私は、次のエラーメッセージが表示されました。あなたはこの問題を修正し、それが後で起こるのを防ぐ方法を教えてください。
エラーはかなり明白です。不一致型のテンソルのリストを渡しています。おそらく、損失オブジェクトをすべてのFloat64のリストにキャストするための方法を見つける必要があります(フル精度を維持するため)。 – csunday95
こんにちはcsunday 95!ご意見ありがとうございます!実際には、loss = tf.cast(tf.reduce_sum(tf.square(vector))、dtype = tf.float32)を使ってコストをキャストしようとしましたが、 コンパイラは最初の引数とinitilizationオプティマイザはfloat64です! – Kratos1808