TF 准确度指标需要单个值,但需要一个概率列表

问题描述 投票:0回答:1

我正在执行一个简单的序列到序列转换器任务。我尝试了各种损失和指标,但没有一个有效。目前,在 model.compile() 中我正在使用这些:

loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'],

代码的输入和final_layer输出是正确的(batch_size、output_seq_length、output_vocab_size):

Sample input shape (encoder input): (18, 20)
Sample input shape (decoder input): (18, 100)
Model output shape: (18, 100, 200)
tf.Tensor([ 18 100 200], shape=(3,), dtype=int32)

无论如何,我得到的错误是它需要单个值:

InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got 100
 [[{{node metrics/accuracy/Squeeze}}]]

所有代码都可以在一个相对简单的游乐场中使用:
https://colab.research.google.com/drive/1tfk518PwmrJEapxIQlOuiLmiTSfxREk3?usp=sharing
但这里是一些核心代码(我已经尝试了所有指标和损失):

self.encoder_embedding = tf.keras.layers.Embedding(args.problem_vocab_size, args.dim)
self.encoder_ffn = tf.keras.Sequential([
    tf.keras.layers.Dense(args.dim_ff, activation='relu'),
    tf.keras.layers.Dense(args.dim)
])

self.decoder_embedding = tf.keras.layers.Embedding(args.solution_vocab_size, args.dim)
self.cross_attention = tf.keras.layers.MultiHeadAttention(num_heads=args.num_heads, key_dim=args.dim // args.num_heads)
self.decoder_ffn = tf.keras.Sequential([
    tf.keras.layers.Dense(args.dim_ff, activation='relu'),
    tf.keras.layers.Dense(args.dim)
])

self.final_layer = tf.keras.layers.Dense(args.solution_vocab_size)

model.compile(optimizer=tf.keras.optimizers.legacy.Adam(args.learning_rate),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[tf.keras.metrics.sparse_categorical_accuracy],
              run_eagerly=False)

model.fit(dataset, epochs=args.epochs, steps_per_epoch=args.num_batches)
tensorflow nlp tensorflow2.0
1个回答
0
投票

找到了解决方案,但我仍然不知道为什么原来的方法不起作用。如果我使用稀疏_分类_交叉熵指标,它会起作用 - 尽管我相信这会使我的准确性作为 seq-to-seq 任务的指标不太相关。

© www.soinside.com 2019 - 2024. All rights reserved.