Я пытаюсь создать пользовательскую функцию потерь в кератах, которая является максимальной маржинальной потерей.В функции потерь необходимо создать строку и извлечь данные с использованием сгенерированных весов.Например, если термин «лихорадка» имеет вес «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"]()]]