Как использовать рваные заполнители в Tensorflow - PullRequest
0 голосов
/ 07 августа 2020

Я пытался использовать тензоры Ragged в тензорном потоке. Но я сталкиваюсь с проблемами при попытке накормить оборванный плейсхолдер данными. Все примеры Tensorflow на официальном сайте используют ragged.constants, который у меня отлично работает. К сожалению, нет примеров использования ragged.Placeholder.

. Ниже приведен простой код, который работает со штрафами, используя константы:

rt = tf.ragged.constant([[[1, 2 ] ,  [4, 5]] , [[6, 7] ,  [8, 9] , [10, 11]]] , ragged_rank=1 )
rt= tf.Print(rt.values , [rt.values] , "This is a constat")
with tf.Session() as sess : 
    re    = sess.run([rt  ])


output : 
    This is a constat[[1 2][4...]...] 

, однако при попытке сделать то же самое с заполнителями я получаю ошибка. , ниже мой код с использованием заполнителей:

vals = [[[1, 2 ] ,  [4, 5]] , [[6, 7] ,  [8, 9] , [10, 11]]]



myTensor = tf.compat.v1.ragged.placeholder(dtype=tf.int32 , ragged_rank=1)
rt= tf.Print(myTensor.values , [myTensor.values] , "This is a placeholder")
with tf.Session() as sess : 
    re    = sess.run([rt  ],feed_dict={myTensor:vals})

Я получаю следующую ошибку:

<ipython-input-27-5c8fe49f6984> in <module>
      6 rt= tf.Print(myTensor.values , [myTensor.values] , "This is a placeholder")
      7 with tf.Session() as sess :
----> 8     re    = sess.run([rt  ],feed_dict={myTensor:vals})

C:\ProgramData\Anaconda3\envs\AutoEncoder\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata)
    956     try:
    957       result = self._run(None, fetches, feed_dict, options_ptr,
--> 958                          run_metadata_ptr)
    959       if run_metadata:
    960         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

C:\ProgramData\Anaconda3\envs\AutoEncoder\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
   1116       feed_dict = nest.flatten_dict_items(feed_dict)
   1117       for feed, feed_val in feed_dict.items():
-> 1118         for subfeed, subfeed_val in _feed_fn(feed, feed_val):
   1119           try:
   1120             subfeed_t = self.graph.as_graph_element(

C:\ProgramData\Anaconda3\envs\AutoEncoder\lib\site-packages\tensorflow\python\client\session.py in _feed_fn(feed, feed_val)
   1096       for tensor_type, _, feed_fn, _ in _REGISTERED_EXPANSIONS:
   1097         if isinstance(feed, tensor_type):
-> 1098           return feed_fn(feed, feed_val)
   1099       raise TypeError('Feed argument %r has invalid type %r' %
   1100                       (feed, type(feed)))

C:\ProgramData\Anaconda3\envs\AutoEncoder\lib\site-packages\tensorflow\python\ops\ragged\ragged_tensor.py in _ragged_tensor_session_feed(feed_key, feed_val)
   2366 def _ragged_tensor_session_feed(feed_key, feed_val):
   2367   key_components = feed_key.nested_row_splits + (feed_key.flat_values,)
-> 2368   val_components = feed_val.nested_row_splits + (feed_val.flat_values,)
   2369   return zip(key_components, val_components)
   2370 

AttributeError: 'list' object has no attribute 'nested_row_splits'

Очевидно, что данные, которые я передаю, не соответствуют структуре, ожидаемой заполнителем, но как именно я должен форматировать / структурировать свои данные.

также обратите внимание, что я использую Tensorflow 2.3 и включил совместимость с v1 и отключил активное выполнение.

благодарю за вашу помощь

...