我想计算每个班级的精度和召回率,而不仅仅是一个。我知道tensorflow.keras.metrics
有Precision
和Recall
,它们可以占用class_id
。但是,如果我想将这些指标用于多个class_id
,则无法编译我的模型。如果我只有class_id = 0
,它将编译并运行。
当我为Recall
包含Precision
和class_id = 1
时,会发生以下情况。
这是什么问题?我该如何解决?非常感谢您的帮助。
仅使用一个class_id
即可成功编译和训练。但是,当我为指标添加另一个class_id
时,它将不起作用。
vocab_size = len(word_index)
embedding_dimension = 16
with strategy.scope():
model = tf.keras.Sequential()
model.add(tf.keras.layers.Embedding(vocab_size, embedding_dimension, input_length=max_sentence_length))
model.add(tf.keras.layers.SpatialDropout1D(0.3))
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128)))
model.add(tf.keras.layers.Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy',
Recall(class_id=0, name='recall_0'),
Precision(class_id=0, name='precision_0'),
Recall(class_id=1, name='recall_1'),
Precision(class_id=1, name='precision_1')
])
INFO:tensorflow:Error reported to Coordinator: slice index 1 of dimension 1 out of bounds. for 'metrics_14/recall_1/strided_slice_1' (op: 'StridedSlice') with input shapes: [?,1], [2], [2], [2] and with computed input tensors: input[1] = <0 1>, input[2] = <0 2>, input[3] = <1 1>.
我希望它能够以多级精度和调用率成功编译。