Python 如何使用';召回';keras分类器中的as度量?
如何在keras分类器中使用“召回”和其他指标。下面的代码仅适用于准确性,但如果我更改度量以调用它,它将失败 版本 MWEPython 如何使用';召回';keras分类器中的as度量?,python,tensorflow,keras,Python,Tensorflow,Keras,如何在keras分类器中使用“召回”和其他指标。下面的代码仅适用于准确性,但如果我更改度量以调用它,它将失败 版本 MWE 将numpy导入为np 作为pd进口熊猫 导入sklearn 导入tensorflow作为tf 进口干酪 从keras.models导入顺序 从keras.layers.core导入 种子=100 np.随机种子(100) X=np.random.random((20,3)) y=np.random.randint(0,2,大小=20) 印刷品(x形,y形)#(20,3)(
将numpy导入为np
作为pd进口熊猫
导入sklearn
导入tensorflow作为tf
进口干酪
从keras.models导入顺序
从keras.layers.core导入
种子=100
np.随机种子(100)
X=np.random.random((20,3))
y=np.random.randint(0,2,大小=20)
印刷品(x形,y形)#(20,3)(20,)
n_输入=X.shape[1]
模型=顺序([
密集(n_输入,输入_形状=(n_输入,),激活='relu'),
稠密(32,活化='relu'),
密集型(2,激活='softmax')
])
指标=‘召回’#召回失败
#公制=‘精度’#精度有效
model.compile('adam',loss='binary\u crossentropy',metrics=[METRIC])
模型拟合(X,y,验证分割=0.2,历元=1)
错误
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
38个时代=10,
39 shuffle=True,
--->40详细=5)
方法包装中的~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py(self,*args,**kwargs)
106定义方法包装(self,*args,**kwargs):
107如果不是self._处于_multi_worker_模式():#pylint:disable=受保护的访问
-->108返回方法(self、*args、**kwargs)
109
110#已经在“运行分配协调器”内部运行了。
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in-fit(self、x、y、批大小、历元、冗余、回调、验证拆分、验证数据、洗牌、类权重、样本权重、初始历元、每个历元的步骤、验证步骤、验证批次大小、验证频率、最大队列大小、工人、使用多处理)
1096批次大小=批次大小):
1097回拨。列车上批次开始(步骤)
->1098 tmp_日志=训练函数(迭代器)
1099如果数据处理程序应同步:
1100 context.async_wait()
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in_uuu调用(self,*args,**kwds)
778其他:
779 compiler=“nonXla”
-->780结果=自身调用(*args,**kwds)
781
782 new_tracing_count=self._get_tracing_count()
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in_调用(self,*args,**kwds)
821#这是"调用"的第一个调用,因此我们必须初始化。
822个初始值设定项=[]
-->823自身初始化(参数、KWD、添加初始化器到=初始化器)
824最后:
825#此时我们知道初始化已完成(或更少)
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in_initialize(self、args、kwds、add_initializer_to)
695自具体状态fn=(
696 self._stateful_fn._get_concrete_function_internal_garbage_collected(#pylint:disable=protected access
-->697*args,**科威特第纳尔)
698
699 def无效的创建者范围(*未使用的参数,**未使用的参数):
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/function.py in\u get\u concrete\u function\u internal\u garbage\u collected(self,*args,**kwargs)
2853 args,kwargs=None,None
2854带自锁:
->2855图形函数,可能定义函数(args,kwargs)
2856返回图函数
2857
函数(self、args、kwargs)中的~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/function.py
3211
3212自.\u函数\u缓存.missed.add(调用上下文\u键)
->3213图形函数=self.\u创建图形函数(args,kwargs)
3214自.\u函数\u缓存.primary[缓存\u键]=图形\u函数
3215返回图_函数,args,kwargs
创建图形函数中的~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/function.py(self、args、kwargs、override\u flat\u arg\u形状)
3073参数名称=参数名称,
3074覆盖平面形状=覆盖平面形状,
->3075按值捕获=自身。_按值捕获),
3076自我功能属性,
3077功能规格=自身功能规格,
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/framework/func\u graph.py从func\u py\u func(名称、python\u func、args、kwargs、签名、func\u图、自动签名、自动签名选项、添加控制依赖项、arg\u名称、op\u返回值、集合、按值捕获、覆盖平面arg\u形状)
984,original_func=tf_decorator.unwrap(python_func)
985
-->986 func_输出=python_func(*func_参数,**func_参数)
987
988#不变量:`func_outputs`只包含张量、复合传感器、,
包装中的~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py(*args,**kwds)
598#uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我们给予
599#函数对自身进行弱引用以避免引用循环。
-->600返回弱_-wrapped_-fn()
601弱包层=弱包层参考(包层)
602
包装器中的~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/framework/func_graph.py(*args,**kwargs)
971例外情况为e:#pylint:disable=broad except
972如果hasattr(e,“AGU错误元数据”):
-->973将e.ag\u错误\u元数据引发到\u异常(e)
974其他:
975提高
ValueError:在用户代码中:
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tens
"""
[('numpy', '1.19.1'),
('pandas', '1.1.1'),
('sklearn', '0.23.2'),
('tensorflow', '2.3.0'),
('keras', '2.4.3')]
"""
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-17-b372311b0ed4> in <module>
38 epochs=10,
39 shuffle=True,
---> 40 verbose=5)
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
106 def _method_wrapper(self, *args, **kwargs):
107 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
--> 108 return method(self, *args, **kwargs)
109
110 # Running inside `run_distribute_coordinator` already.
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
1096 batch_size=batch_size):
1097 callbacks.on_train_batch_begin(step)
-> 1098 tmp_logs = train_function(iterator)
1099 if data_handler.should_sync:
1100 context.async_wait()
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in __call__(self, *args, **kwds)
778 else:
779 compiler = "nonXla"
--> 780 result = self._call(*args, **kwds)
781
782 new_tracing_count = self._get_tracing_count()
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds)
821 # This is the first call of __call__, so we have to initialize.
822 initializers = []
--> 823 self._initialize(args, kwds, add_initializers_to=initializers)
824 finally:
825 # At this point we know that the initialization is complete (or less
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in _initialize(self, args, kwds, add_initializers_to)
695 self._concrete_stateful_fn = (
696 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access
--> 697 *args, **kwds))
698
699 def invalid_creator_scope(*unused_args, **unused_kwds):
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs)
2853 args, kwargs = None, None
2854 with self._lock:
-> 2855 graph_function, _, _ = self._maybe_define_function(args, kwargs)
2856 return graph_function
2857
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _maybe_define_function(self, args, kwargs)
3211
3212 self._function_cache.missed.add(call_context_key)
-> 3213 graph_function = self._create_graph_function(args, kwargs)
3214 self._function_cache.primary[cache_key] = graph_function
3215 return graph_function, args, kwargs
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes)
3073 arg_names=arg_names,
3074 override_flat_arg_shapes=override_flat_arg_shapes,
-> 3075 capture_by_value=self._capture_by_value),
3076 self._function_attributes,
3077 function_spec=self.function_spec,
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/framework/func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes)
984 _, original_func = tf_decorator.unwrap(python_func)
985
--> 986 func_outputs = python_func(*func_args, **func_kwargs)
987
988 # invariant: `func_outputs` contains only Tensors, CompositeTensors,
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in wrapped_fn(*args, **kwds)
598 # __wrapped__ allows AutoGraph to swap in a converted function. We give
599 # the function a weak reference to itself to avoid a reference cycle.
--> 600 return weak_wrapped_fn().__wrapped__(*args, **kwds)
601 weak_wrapped_fn = weakref.ref(wrapped_fn)
602
~/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
971 except Exception as e: # pylint:disable=broad-except
972 if hasattr(e, "ag_error_metadata"):
--> 973 raise e.ag_error_metadata.to_exception(e)
974 else:
975 raise
ValueError: in user code:
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:806 train_function *
return step_function(self, iterator)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:796 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:789 run_step **
outputs = model.train_step(data)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:759 train_step
self.compiled_metrics.update_state(y, y_pred, sample_weight)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/compile_utils.py:409 update_state
metric_obj.update_state(y_t, y_p, sample_weight=mask)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/utils/metrics_utils.py:90 decorated
update_op = update_state_fn(*args, **kwargs)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/metrics.py:176 update_state_fn
return ag_update_state(*args, **kwargs)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/metrics.py:1410 update_state **
sample_weight=sample_weight)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/utils/metrics_utils.py:353 update_confusion_matrix_variables
y_pred.shape.assert_is_compatible_with(y_true.shape)
/Users/poudel/opt/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/framework/tensor_shape.py:1134 assert_is_compatible_with
raise ValueError("Shapes %s and %s are incompatible" % (self, other))
ValueError: Shapes (None, 2) and (None, 1) are incompatible
import numpy as np
import pandas as pd
import sklearn
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers.core import Dense
SEED = 100
np.random.seed(100)
X = np.random.random((20, 3))
y = np.random.randint(0,2,size=20)
print(X.shape, y.shape) # (20, 3) (20,)
n_inputs = X.shape[1]
model = Sequential([
Dense(n_inputs, input_shape=(n_inputs, ), activation='relu'),
Dense(32, activation='relu'),
Dense(1, activation='relu')
])
METRIC = 'Recall' # Recall fails
# METRIC = 'accuracy' # accuracy works
model.compile('adam',loss='binary_crossentropy',metrics=[METRIC])
model.fit(X, y,validation_split=0.2,epochs=1)