Ошибка при использовании eval с новым сеансом или текущим сеансом - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь создать пользовательскую функцию потерь в кератах, которая является максимальной маржинальной потерей.В функции потерь необходимо создать строку и извлечь данные с использованием сгенерированных весов.Например, если термин «лихорадка» имеет вес «2», то строка должна быть лихорадкой ^ 2.Для этого мне нужно использовать функцию K.eval (), чтобы получить массив тензор np и создать строку.Однако я получаю сообщение об ошибке независимо от использования того же сеанса или нового сеанса.

Я попытался tf.Session () = new_session -> K.set_session (new_session), а затем я использовал y_pred.eval (сеанс= new_session)

def custom_loss(y_true, y_pred):


    qno = int(K.mean(y_true).eval(session = new_session))
    t_score = y_pred.eval(session = new_session)


    q = '1:'
    for ind in range(0,len(clinical_notes_words[qno])):
        q = q+' '+clinical_notes_words[0][ind]+'^'+str(K.eval(t_score[ind]))

    with open('/home/rohan/DAIICT/SEM2/IR/IR-PROJECT/terrier-3.6/query.txt','w') as query:
        query.write(q)

    query.close()

    os.system(cmd)

    time.sleep(16)

    result = pd.read_csv('/home/rohan/DAIICT/SEM2/IR/IR-PROJECT/terrier-3.6/var/results/denoising', sep = ' ', header = None)    

    pos_sim = 0
    for i in range(0,len(relevant_docs[1])):
        try:
            pos_sim = result.loc[result[2] == relevant_docs[1][i]].iloc[0,4].values
            break
        except:
            continue

    neg_sim = 0
    for i in range(0,len(relevant_docs[1])):
        try:
            neg_sim = result.loc[result[2] == irrelevant_docs[1][i]].iloc[0,4].values
            break
        except:
            continue

    l = max(0,1-neg_sim+pos_sim)

    r = 0

    for i in range(0,len(t_score)):
        r = r + min(0,t_score[i])**2



    reg_loss = l+r
    reg_loss = K.sum(K.variable(reg_loss))

    return reg_loss

Ожидаемый результат: со значениями y_pred объединить соответствующие термины.

например, ^ 0.5 старый ^ 1.27 человек ^ 1.30 с ^ 0.5 лихорадка ^ 4.0

вышеупомянутый запрос для инструмента поиска терьера.Цифры после '^' означают важность этого термина в запросе.

Редактировать 1: Я получаю ошибку:

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args)
   1333     try:
-> 1334       return fn(*args)
   1335     except errors.OpError as e:

~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in _run_fn(feed_dict, fetch_list, target_list, options, run_metadata)
   1318       return self._call_tf_sessionrun(
-> 1319           options, feed_dict, fetch_list, target_list, run_metadata)
   1320 

~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list, run_metadata)
   1406         self._session, options, feed_dict, fetch_list, target_list,
-> 1407         run_metadata)
   1408 

InvalidArgumentError: You must feed a value for placeholder tensor 'dense_4_target_3' with dtype float and shape [?,?]
     [[{{node dense_4_target_3}} = Placeholder[dtype=DT_FLOAT, shape=[?,?], _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
     [[{{node loss_3/dense_4_loss/Mean/_91}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_7_loss_3/dense_4_loss/Mean", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-21-a55d080d9704> in <module>
----> 1 denoiser.compile(optimizer = 'adagrad', loss = custom_loss)

~/.local/lib/python3.6/site-packages/keras/engine/training.py in compile(self, optimizer, loss, metrics, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, **kwargs)
    340                 with K.name_scope(self.output_names[i] + '_loss'):
    341                     output_loss = weighted_loss(y_true, y_pred,
--> 342                                                 sample_weight, mask)
    343                 if len(self.outputs) > 1:
    344                     self.metrics_tensors.append(output_loss)

~/.local/lib/python3.6/site-packages/keras/engine/training_utils.py in weighted(y_true, y_pred, weights, mask)
    402         """
    403         # score_array has ndim >= 2
--> 404         score_array = fn(y_true, y_pred)
    405         if mask is not None:
    406             # Cast the mask to floatX to avoid float64 upcasting in Theano

<ipython-input-20-510186e2d4e7> in custom_loss(y_true, y_pred)
      2 
      3 
----> 4     qno = int(K.mean(y_true).eval(session = new_session))
      5     t_score = y_pred.eval(session = new_session)
      6 

~/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in eval(self, feed_dict, session)
    711 
    712     """
--> 713     return _eval_using_default_session(self, feed_dict, self.graph, session)
    714 
    715 

~/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in _eval_using_default_session(tensors, feed_dict, graph, session)
   5155                        "the tensor's graph is different from the session's "
   5156                        "graph.")
-> 5157   return session.run(tensors, feed_dict)
   5158 
   5159 

~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in run(self, fetches, feed_dict, options, run_metadata)
    927     try:
    928       result = self._run(None, fetches, feed_dict, options_ptr,
--> 929                          run_metadata_ptr)
    930       if run_metadata:
    931         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
   1150     if final_fetches or final_targets or (handle and feed_dict_tensor):
   1151       results = self._do_run(handle, final_targets, final_fetches,
-> 1152                              feed_dict_tensor, options, run_metadata)
   1153     else:
   1154       results = []

~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1326     if handle is None:
   1327       return self._do_call(_run_fn, feeds, fetches, targets, options,
-> 1328                            run_metadata)
   1329     else:
   1330       return self._do_call(_prun_fn, handle, feeds, fetches)

~/.local/lib/python3.6/site-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args)
   1346           pass
   1347       message = error_interpolation.interpolate(message, self._graph)
-> 1348       raise type(e)(node_def, op, message)
   1349 
   1350   def _extend_graph(self):

InvalidArgumentError: You must feed a value for placeholder tensor 'dense_4_target_3' with dtype float and shape [?,?]
     [[node dense_4_target_3 (defined at /home/rohan/.local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:517)  = Placeholder[dtype=DT_FLOAT, shape=[?,?], _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
     [[{{node loss_3/dense_4_loss/Mean/_91}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_7_loss_3/dense_4_loss/Mean", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

Caused by op 'dense_4_target_3', defined at:
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/ipykernel_launcher.py", line 16, in <module>
    app.launch_new_instance()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/traitlets/config/application.py", line 658, in launch_instance
    app.start()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/ipykernel/kernelapp.py", line 505, in start
    self.io_loop.start()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/platform/asyncio.py", line 132, in start
    self.asyncio_loop.run_forever()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/asyncio/base_events.py", line 438, in run_forever
    self._run_once()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/asyncio/base_events.py", line 1451, in _run_once
    handle._run()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/asyncio/events.py", line 145, in _run
    self._callback(*self._args)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/ioloop.py", line 758, in _run_callback
    ret = callback()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/stack_context.py", line 300, in null_wrapper
    return fn(*args, **kwargs)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/gen.py", line 1233, in inner
    self.run()
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/gen.py", line 1147, in run
    yielded = self.gen.send(value)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/ipykernel/kernelbase.py", line 357, in process_one
    yield gen.maybe_future(dispatch(*args))
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/gen.py", line 326, in wrapper
    yielded = next(result)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/ipykernel/kernelbase.py", line 267, in dispatch_shell
    yield gen.maybe_future(handler(stream, idents, msg))
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/gen.py", line 326, in wrapper
    yielded = next(result)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/ipykernel/kernelbase.py", line 534, in execute_request
    user_expressions, allow_stdin,
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tornado/gen.py", line 326, in wrapper
    yielded = next(result)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/ipykernel/ipkernel.py", line 294, in do_execute
    res = shell.run_cell(code, store_history=store_history, silent=silent)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/ipykernel/zmqshell.py", line 536, in run_cell
    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2819, in run_cell
    raw_cell, store_history, silent, shell_futures)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2845, in _run_cell
    return runner(coro)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/IPython/core/async_helpers.py", line 67, in _pseudo_sync_runner
    coro.send(None)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3020, in run_cell_async
    interactivity=interactivity, compiler=compiler, result=result)
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3191, in run_ast_nodes
    if (yield from self.run_code(code, result)):
  File "/home/rohan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-21-a55d080d9704>", line 1, in <module>
    denoiser.compile(optimizer = 'adagrad', loss = custom_loss)
  File "/home/rohan/.local/lib/python3.6/site-packages/keras/engine/training.py", line 238, in compile
    dtype=K.dtype(self.outputs[i]))
  File "/home/rohan/.local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 517, in placeholder
    x = tf.placeholder(dtype, shape=shape, name=name)
  File "/home/rohan/.local/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py", line 1747, in placeholder
    return gen_array_ops.placeholder(dtype=dtype, shape=shape, name=name)
  File "/home/rohan/.local/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py", line 5206, in placeholder
    "Placeholder", dtype=dtype, shape=shape, name=name)
  File "/home/rohan/.local/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "/home/rohan/.local/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 488, in new_func
    return func(*args, **kwargs)
  File "/home/rohan/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3274, in create_op
    op_def=op_def)
  File "/home/rohan/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1770, in __init__
    self._traceback = tf_stack.extract_stack()

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dense_4_target_3' with dtype float and shape [?,?]
     [[node dense_4_target_3 (defined at /home/rohan/.local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:517)  = Placeholder[dtype=DT_FLOAT, shape=[?,?], _device="/job:localhost/replica:0/task:0/device:GPU:0"]()]]
     [[{{node loss_3/dense_4_loss/Mean/_91}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_7_loss_3/dense_4_loss/Mean", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...