使用tensorflow计算多类精度和召回率的问题

使用tensorflow计算多类精度和召回率的问题,tensorflow,multiclass-classification,Tensorflow,Multiclass Classification,我想在这里记录每个类的召回率和精度,因为代码总是显示形状不完整的错误。然而,如果我只在model.compile中使用metrics=['accurity'],它会工作得很好。我想问到底是什么问题 模型:“顺序” 图层(类型)输出形状参数# 稠密的(稠密的)(无,512)40120 辍学(辍学)(无,512)0 密集型_1(密集型)(无,10)5130 总参数:407050 可培训参数:407050 不可训练参数:0 培训1000个样本,验证1000个样本 纪元1/10 32/1000[

我想在这里记录每个类的召回率和精度,因为代码总是显示形状不完整的错误。然而,如果我只在model.compile中使用metrics=['accurity'],它会工作得很好。我想问到底是什么问题

模型:“顺序”


图层(类型)输出形状参数# 稠密的(稠密的)(无,512)40120


辍学(辍学)(无,512)0


密集型_1(密集型)(无,10)5130 总参数:407050 可培训参数:407050 不可训练参数:0


培训1000个样本,验证1000个样本 纪元1/10

32/1000[……]-预计到达时间:3s Epoch 00001:将模型保存到训练\u 1/cp.ckpt

32/1000[……]-预计到达时间:10sTraceback(最近一次呼叫最后一次): 文件“E:/TUWien/Paper\u 2/HM\u code/3rd\u Paper\u save\u model\u draft.py”,第55行,在 回调=[cp\U回调]) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\keras\engine\training.py”,第728行 使用多处理=使用多处理) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\keras\engine\training\u v2.py”,第324行 总(单位时间=时间) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2\u env\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2.py”,第123行,运行\u one\u 批处理输出=执行函数(迭代器) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils.py”,第86行,在函数执行中 分布函数(输入函数) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\eager\def_function.py”,第457行,在调用中 结果=自身调用(*args,**kwds) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\eager\def_function.py”,第503行,在调用中 self.\u initialize(args、kwds、add\u initializer\u to=initializer\u map) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\eager\def_function.py”,第408行,在_initialize中 *args,**科威特第纳尔) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2\u env\lib\site packages\tensorflow\u core\python\eager\function.py”,第1848行,位于“获取具体函数”内部“垃圾收集” 图函数,自我,可能定义函数(args,kwargs) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2\u env\lib\site packages\tensorflow\u core\python\eager\function.py”,第2150行,在函数定义中 graph\u function=self.\u create\u graph\u function(args,kwargs) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2\u env\lib\site packages\tensorflow\u core\python\eager\function.py”,第2041行,位于创建图函数中 按值捕获=自身。_按值捕获), 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow\u core\python\framework\func\u graph.py”,第915行,位于_py\u func的func\u图中 func_outputs=python_func(*func_args,**func_kwargs) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\eager\def_function.py”,第358行,包装为\u fn 返回弱包装的(包装的(*args,**kwds) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils.py”,第73行,在分布式函数中 per_replica_函数,args=(模型,x,y,样本权重)) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\distribute\distribute_lib.py”,第760行,在实验运行版本2中 返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\distribute\distribute_lib.py”,第1787行,用于调用每个_副本 返回自我。为每个副本(fn、ARG、kwargs)调用 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\distribute\distribute_lib.py”,第2132行,位于每个副本的调用中 返回fn(*args,**kwargs) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\autograph\impl\api.py”,第292行,在包装器中 返回函数(*args,**kwargs) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow\u core\python\keras\engine\training\u v2\u utils.py”,第264行,在列批处理中 输出\损失\度量=模型。\输出\损失\度量) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow\u core\python\keras\engine\training\u eager.py”,第315行,在批处理的列中 模型、输出、目标、样本权重=样本权重、遮罩=遮罩) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2\u env\lib\site packages\tensorflow\u core\python\keras\engine\training\u eager.py”,第74行,在\u eager\u metrics\u fn中 跳过\u目标\u掩码=模型。\u准备\u跳过\u目标\u掩码() 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow_core\python\keras\engine\training.py”,第2063行,位于\u handle\u metrics中 目标、输出、输出(U) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow\u core\python\keras\engine\training.py”,第2014行,位于每个输出的句柄 度量值(fn,y_真,y_pred,权重=权重,掩码=掩码) 文件“C:\Users\jzhao\AppData\Local\Continuum\anaconda3\envs\tf2_env\lib\site packages\tensorflow\u core\python\keras\engine\training\u utils.py”,第1067行,在call\u metric\u函数中 R
from __future__ import absolute_import, division, print_function

import os

import tensorflow as tf
from tensorflow import keras

tf.__version__

(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

train_labels = train_labels[:1000]
test_labels = test_labels[:1000]

train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0
 
def create_model():
    model = tf.keras.models.Sequential([
        keras.layers.Dense(512, activation=tf.nn.relu, input_shape=(784,)),
        keras.layers.Dropout(0.2),
        keras.layers.Dense(10, activation=tf.nn.softmax)
    ])

    METRICS = [
        keras.metrics.BinaryAccuracy(name='accuracy'),
        keras.metrics.Precision(name='precision',class_id=1),
        keras.metrics.Precision(name='precision', class_id=2),
        keras.metrics.Recall(name='recall',class_id=1),
        keras.metrics.Recall(name='recall', class_id=2),
    ]

    model.compile(optimizer=tf.keras.optimizers.Adam(),
                  loss=tf.keras.losses.sparse_categorical_crossentropy,
                  metrics=METRICS)

    return model

model = create_model()
model.summary()

checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

cp_callback = tf.keras.callbacks.ModelCheckpoint(checkpoint_path,
                                                 save_weights_only=True, 
                                                 verbose=1)
model = create_model()
model.fit(train_images, train_labels,  epochs = 10,
          validation_data = (test_images,test_labels),
          callbacks = [cp_callback]) 

model = create_model()
loss, acc = model.evaluate(test_images, test_labels)
print("Untrained model, accuracy: {:5.2f}%".format(100*acc)) #11.4%

model.load_weights(checkpoint_path)
loss,acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc)) #86.2

model.save_weights('./checkpoints/my_checkpoint')

model = create_model()
model.load_weights('./checkpoints/my_checkpoint')
loss,acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc)) #87.00%