Skip to main content
 首页 » 编程设计

python之如何计算在 Tensorflow 中训练 RNN 语言模型的准确率

2024年12月31日25zfyouxi

我在这里使用这个词级 RNN 语言模型:https://github.com/hunkim/word-rnn-tensorflow

如何计算RNN模型在每个epoch的准确率。

以下是训练中的代码,显示每个时期的训练损失和其他内容:

for e in range(model.epoch_pointer.eval(), args.num_epochs): 
        sess.run(tf.assign(model.lr, args.learning_rate * (args.decay_rate ** e))) 
        data_loader.reset_batch_pointer() 
        state = sess.run(model.initial_state) 
        speed = 0 
        if args.init_from is None: 
            assign_op = model.epoch_pointer.assign(e) 
            sess.run(assign_op) 
        if args.init_from is not None: 
            data_loader.pointer = model.batch_pointer.eval() 
            args.init_from = None 
        for b in range(data_loader.pointer, data_loader.num_batches): 
            start = time.time() 
            x, y = data_loader.next_batch() 
            feed = {model.input_data: x, model.targets: y, model.initial_state: state, 
                    model.batch_time: speed} 
            summary, train_loss, state, _, _ = sess.run([merged, model.cost, model.final_state, 
                                                         model.train_op, model.inc_batch_pointer_op], feed) 
            train_writer.add_summary(summary, e * data_loader.num_batches + b) 
            speed = time.time() - start 
            if (e * data_loader.num_batches + b) % args.batch_size == 0: 
                print("{}/{} (epoch {}), train_loss = {:.3f}, time/batch = {:.3f}" \ 
                    .format(e * data_loader.num_batches + b, 
                            args.num_epochs * data_loader.num_batches, 
                            e, train_loss, speed)) 
            if (e * data_loader.num_batches + b) % args.save_every == 0 \ 
                    or (e==args.num_epochs-1 and b == data_loader.num_batches-1): # save for the last result 
                checkpoint_path = os.path.join(args.save_dir, 'model.ckpt') 
                saver.save(sess, checkpoint_path, global_step = e * data_loader.num_batches + b) 
                print("model saved to {}".format(checkpoint_path)) 
train_writer.close() 

请您参考如下方法:

由于模型具有每个类别的目标概率和预测概率。 您可以减少概率张量以保持最高概率的类索引。

predictions = tf.cast(tf.argmax(model.probs, axis=2), tf.int32) 

然后你可以和targets做对比,判断是否预测成功:

correct_preds = tf.equal(predictions, model.targets) 

最后,准确度是正确预测与输入大小的比率,也就是这个 bool 张量的平均值。

accuracy = tf.reduce_mean(tf.cast(correct_preds, tf.float32))