2017-08-16 69 views
0

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.]. 

は、しかし私は、次のエラーメッセージが表示されました。あなたはこの問題を修正し、それが後で起こるのを防ぐ方法を教えてください。

+0

エラーはかなり明白です。不一致型のテンソルのリストを渡しています。おそらく、損失オブジェクトをすべてのFloat64のリストにキャストするための方法を見つける必要があります(フル精度を維持するため)。 – csunday95

+0

こんにちはcsunday 95!ご意見ありがとうございます!実際には、loss = tf.cast(tf.reduce_sum(tf.square(vector))、dtype = tf.float32)を使ってコストをキャストしようとしましたが、 コンパイラは最初の引数とinitilizationオプティマイザはfloat64です! – Kratos1808

答えて

0

次のコードはテンソルフローバージョン1.2.0で動作します。また、変数を初期化する必要があります。

import tensorflow as tf 
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: 
    session.run(tf.global_variables_initializer()) 
    print(session.run(vector)) # results: [7.0, 7.0] 
    optimizer.minimize(session) 
    print(session.run(vector)) # results: [ -1.88996808e-06 -1.88996808e-06] 
+0

こんにちはIshant Mrinal!迅速な対応に感謝します。あなたのコードを実行しようとしましたが、同じエラーが発生しました。コンパイラは非常に厄介で、オプティマイザを初期化するとエラーが発生します。ちなみに、私はjupyterノートブックでコードを実行しています。 – Kratos1808

+0

これはあなたのテンソルフローバージョンまたはジュピターに関連する可能性があります。 –

+0

ありがとうございました!私があなたが言及した2つの事をチェックします。 – Kratos1808

関連する問題