【发布时间】:2018-08-25 10:34:06
【问题描述】:
我正在使用 keras 网站上给出的自定义矩阵:
def compute_roc (y_true, y_pred):
y_true =K.eval(y_true)#.eval(session=sess)
y_pred = K.eval(y_pred)#.eval(session=sess)
roc = metrics.roc_curve(y_true, y_pred, pos_label=2)
roc = tf.to_float(roc, name='ToFloat')
return roc
但我在“K.eval(y_true)”上遇到错误
InvalidArgumentError Traceback (most recent call last) <ipython-input-7-1de7569967ec> in <module>() 20 #disc.load_weights(os.path.join(path, model_name+'.h5')) 21 sgd = SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True) ---> 22 disc.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy',compute_roc]) 23 #plot_model(模型,to_file='model.png') 24 print('光盘模型加载')
/usr/local/lib/python2.7/dist-packages/keras/engine/training.pyc in compile(self, optimizer, loss, metrics, loss_weights,sample_weight_mode, weighted_metrics, target_tensors, **kwargs) 第912章 913 --> 914 句柄度量(输出度量) 第915章 第916章
/usr/local/lib/python2.7/dist-packages/keras/engine/training.pyc in handle_metrics(metrics, weights) 909 metric_result = weighted_metric_fn(y_true, y_pred, 910 weights=weights, --> 911 mask=masks[i]) 912 append_metric(i, metric_name, metric_result) 913 /usr/local/lib/python2.7/dist-packages/keras/engine/training.pyc in weighted(y_true, y_pred, weights, mask) 424 """ 425 # score_array has ndim >= 2 --> 426 score_array = fn(y_true, y_pred) 427 if mask is not None: 428 # Cast the mask to floatX to avoid float64 upcasting in theano <ipython-input-7-1de7569967ec> in compute_roc(y_true, y_pred) 4 5 def compute_roc (y_true, y_pred): ----> 6 y_true1 =K.eval(y_true)#.eval(session=sess) 7 # y_pred1 = K.eval(y_pred)#.eval(session=sess) 8 roc = 0#metrics.roc_curve(y_true, y_pred, pos_label=2) /usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.pyc在 eval(x) 中 658``` 第659章 --> 660 返回到_dense(x).eval(session=get_session()) 661 第662章
/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc在 eval(self, feed_dict, session) 539 第540章 --> 541 返回 _eval_using_default_session(self, feed_dict, self.graph, session) 542 第543章
/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.pyc在_eval_using_default_session(张量,feed_dict,图,会话) 4083“张量的图表与会话的不同” 第4084章 -> 4085 返回 session.run(张量,feed_dict) 4086 第4087章
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc在运行中(self、fetches、feed_dict、options、run_metadata) 893尝试: 第894章 --> 895 run_metadata_ptr) 896 如果运行元数据: 第897章
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pycin _run(self, handle, fetches, feed_dict, options, run_metadata) 1122 如果 final_fetches 或 final_targets 或(句柄和 feed_dict_tensor): 1123 结果 = self._do_run(句柄,final_targets,final_fetches, -> 1124 feed_dict_tensor,选项,run_metadata) 1125 其他: 1126 个结果 = []
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc在 _do_run(self, handle, target_list, fetch_list, feed_dict, options, 运行元数据) 1319 如果句柄为无: 第1320章 -> 1321 个选项,run_metadata) 1322 其他: 第1323章 返回self._do_call(_prun_fn,self._session,句柄,提要,获取)
/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.pyc在 _do_call(self, fn, *args) 1338 除了 KeyError: 1339通过 -> 1340 raise type(e)(node_def, op, message) 1341 第1342章
InvalidArgumentError: You must feed a value for placeholder tensor 'dense_6_target' with dtype float and shape [?,?] [[Node: dense_6_target = Placeholder[dtype=DT_FLOAT, shape=[?,?], _device="/job:localhost/replica:0/task:0/gpu:0"]()]] [[Node: dense_6_target/_833 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0",send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_4_dense_6_target", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
Caused by op u'dense_6_target', defined at: File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/usr/local/lib/python2.7/dist-packages/ipykernel_launcher.py", line16,在 app.launch_new_instance() 文件“/usr/local/lib/python2.7/dist-packages/traitlets/config/application.py”, 第 658 行,在 launch_instance app.start() 文件“/usr/local/lib/python2.7/dist-packages/ipykernel/kernelapp.py”,行 478,开始 self.io_loop.start() 文件“/usr/local/lib/python2.7/dist-packages/zmq/eventloop/ioloop.py”,行 177,开始 超级(ZMQIOLoop,自我).start() 文件“/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py”,第 888 行,开始 handler_func(fd_obj,事件) 文件“/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py”, 第 277 行,在 null_wrapper 中 返回 fn(*args, **kwargs) 文件“/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py”, 第 440 行,在 _handle_events 中 self._handle_recv() 文件“/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py”, 第 472 行,在 _handle_recv self._run_callback(回调,味精) 文件“/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py”, 第 414 行,在 _run_callback 回调(*args,**kwargs) 文件“/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py”, 第 277 行,在 null_wrapper 中 返回 fn(*args, **kwargs) 文件“/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py”,行 283,在调度程序中 返回 self.dispatch_shell(流,味精) 文件“/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py”,行 233,在dispatch_shell中 处理程序(流,身份,味精) 文件“/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py”,行 399,在执行请求中 用户表达式,允许标准输入) 文件“/usr/local/lib/python2.7/dist-packages/ipykernel/ipkernel.py”,行 208,在 do_execute res = shell.run_cell(代码,store_history=store_history,silent=silent) 文件“/usr/local/lib/python2.7/dist-packages/ipykernel/zmqshell.py”,行 第537章 return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) 文件“/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py”, 第 2718 行,在 run_cell 中 交互性=交互性,编译器=编译器,结果=结果) 文件“/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py”, 第 2822 行,在 run_ast_nodes 如果 self.run_code(代码,结果): 文件“/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py”, 第 2882 行,在 run_code 中 执行(code_obj,self.user_global_ns,self.user_ns) 文件“”,第 22 行,在 disc.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy', 计算_roc]) 文件“/usr/local/lib/python2.7/dist-packages/keras/engine/training.py”, 第 722 行,在编译中 dtype=K.dtype(self.outputs[i])) 文件“/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.py”, 第 504 行,在占位符中 x = tf.placeholder(dtype, shape=shape, name=name) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py”, 第 1548 行,在占位符中 返回 gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py”, 第 2094 行,在 _placeholder 名称=名称) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py”, 第 767 行,在 apply_op 中 op_def=op_def) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py”, 第 2630 行,在 create_op 中 original_op=self._default_original_op, op_def=op_def) 文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py”, 第 1204 行,在 init 中 self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dense_6_target' with dtype float and形状 [?,?] [[节点:dense_6_target = Placeholderdtype=DT_FLOAT, shape=[?,?], _device="/job:localhost/replica:0/task:0/gpu:0"]] [[节点:dense_6_target/_833 = _Recvclient_terminated=false,recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_4_dense_6_target", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]]
另一种方法是在每个 epoch 结束时计算“y_pred”并计算 roc。
【问题讨论】:
-
从模型中获得预测后,为什么不使用
sklearn roc_auc? -
问题在于:y_true =K.eval(y_true) AND y_pred = K.eval(y_pred)
标签: keras