如何在训练期间每个时期结束时调用测试集?我正在使用张量流

2023-12-31

我正在使用 Tensorflow-Keras 开发一个 CNN 模型,其中我将数据集分为训练集、验证集和测试集。我需要在每个时期结束时调用测试集以及训练集和验证集来评估模型性能。下面是我跟踪训练集和验证集的代码。

result_dic = {"epochs": []}
json_logging_callback = LambdaCallback(
                on_epoch_begin=lambda epoch, logs: [learning_rate],
                on_epoch_end=lambda epoch, logs:
                result_dic["epochs"].append({
                    'epoch': epoch + 1, 
                    'acc': str(logs['acc']), 
                    'val_acc': str(logs['val_acc'])
                }))
model.fit(x_train, y_train,
                      validation_data=(x_val, y_val),
                      batch_size=batch_size,
                      epochs=epochs,
                      callbacks=[json_logging_callback])

output:

Epoch 1/5
1/1 [==============================] - 4s 4s/step - acc: 0.8611 - val_acc: 0.8333 

但是,我不确定如何将测试集添加到我的回调中以产生以下输出。

预期输出:

Epoch 1/5
1/1 [==============================] - 4s 4s/step - acc: 0.8611 - val_acc: 0.8333  - test_acc: xxx

要在每个时期后显示您的测试准确性,您可以自定义您的fit函数来显示此指标。看看这个文档 https://www.tensorflow.org/guide/keras/customizing_what_happens_in_fit或者你可以,如图所示here https://github.com/keras-team/keras/issues/2548,为您的测试数据集定义一个简单的回调并将其传递到您的fit功能:


model.fit(x_train, y_train,
                      validation_data=(x_val, y_val),
                      batch_size=batch_size,
                      epochs=epochs,
                      callbacks=[json_logging_callback, 
                                 your_test_callback((X_test, Y_test))])

如果您想要完全的灵活性,您可以尝试使用训练循环 https://www.tensorflow.org/guide/basic_training_loops.

更新:由于您希望所有指标都使用一个 JSON,因此您应该执行以下操作:

定义你的TestCallBack并添加您的测试准确性(以及loss如果你愿意的话)到你的logs字典:

import tensorflow as tf

class TestCallback(tf.keras.callbacks.Callback):
    def __init__(self, test_data):
        self.test_data = test_data

    def on_epoch_end(self, epoch, logs):
        x, y = self.test_data
        loss, acc = self.model.evaluate(x, y, verbose=0)
        logs['test_accuracy'] = acc

然后将测试准确性添加到结果字典中:

result_dic = {"epochs": []}

json_logging_callback = tf.keras.callbacks.LambdaCallback(
                on_epoch_begin=lambda epoch, logs: [learning_rate],
                on_epoch_end=lambda epoch, logs:
                result_dic["epochs"].append({
                    'epoch': epoch + 1, 
                    'acc': str(logs['accuracy']), 
                    'val_acc': str(logs['val_accuracy']),
                    'test_acc': str(logs['test_accuracy'])
                }))

然后只需在您的中使用两个回调fit函数但请注意回调的顺序:

model.fit(x_train, y_train,
                      validation_data=(x_val, y_val),
                      batch_size=batch_size,
                      epochs=epochs,
                      callbacks=callbacks=[TestCallback((x_test, y_test)), json_logging_callback])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在训练期间每个时期结束时调用测试集?我正在使用张量流 的相关文章

随机推荐

  • 特定活动开放后销毁所有先前的活动[重复]

    这个问题在这里已经有答案了 这是场景 Activity A gt Activity B gt Activity C gt Activity D 我想在之后销毁 Activity A B 和 CActivity D已推出 有什么想法吗 Int
  • python 和 ip 范围?

    例如 我有一个文件 城市和 IP 地址 City1 31 25 87 0 31 25 87 15 City2 31 47 224 0 31 47 255 255 如何通过ip地址知道城市名称 http www icir org robin
  • 如何解密V FoxPro加密的字符串

    我有一个用 Visual Fox Pro 构建的程序 它可以在数据库中读取和写入信息 但该信息是加密的 我有源代码 所以我有钥匙 加密和解密的密钥相同 用于加密 解密 但我无法获得用于加密 解密的算法 我需要这个来使用 C 创建一个新程序
  • 如果盖子关闭,如何以编程方式从睡眠中唤醒?

    我想以编程方式将系统从睡眠状态唤醒 有什么办法可以做到这一点吗 我已阅读以下链接 http developer apple com mac library qa qa2004 qa1340 html http developer apple
  • 通过python脚本调整excel中单元格的宽度和高度(以毫米/厘米为单位)

    我试图寻找它 但没有找到 是否可以使用 openpyxl 或 xlwt 模块以 mm 或 cm 尺寸调整 excel 中单元格的宽度和高度 如果是 那么有人可以指出我的脚本命令吗 多谢 使用 Openpyxl 设置列宽 setting wi
  • 如何在 nHibernate 中部分投影具有多个字段的子对象

    我有以下 nHibernate 查询 它根据课程 ID 选择课程 然后返回选定的字段对于初始获取的课程对象 查询执行没有问题 MatchMode option CourseItem courseAlias null TeacherItem
  • 如何读取txt文件C++并将它们分成几列

    这是我第一次用 c Visual studio 2010 编写代码 我有我想要实现的逻辑 但我无法将其写入代码 查看了许多样品 但没有发现任何结果 基本上我有一个制表符分隔的 txt 文件 我想读取它并将数据放入字符串 字符串数组中 问题是
  • SpringBoot - BeanDefinitionOverrideException:无效的 bean 定义

    我正在尝试使用 Spring Boot 在本地设置 DynamoDB 最初 我的设置正常运行 并且能够通过存储库写入 保存到 DynamoDB 从那时起 我添加了更多类来构建我的应用程序 现在 当我尝试启动我的应用程序时 出现以下异常 or
  • 我已经创建了一个带有套接字的 Java 服务器,那么如何打印到所有套接字?

    我已经尝试了一段时间了 我希望多个客户端同时接收多个输入 有一个问题 如果一个客户端说 print2all Hi 我希望服务器向所有客户端打印 Hi 我知道如何处理它来打印它 只是打印到所有客户端就是问题所在 这是我到目前为止所拥有的 Se
  • 如何根据 GHCi 中的记录制作镜头

    我想玩一下Lens图书馆一点 我已将其加载到 GHCi 中并创建了带有适当下划线的记录数据类型 gt data Foo a Foo arg1 Int arg2 a 我想制作镜片Foo使用makeLenses模板 我想这样做 而不需要阅读整套
  • 跨度与浮动垂直对齐

    我在 div 内垂直对齐 3 个跨度时遇到问题 这很容易实现 但是当我使用浮动时垂直对齐不起作用 我希望浅蓝色条垂直居中 代码 container text 1 float left padding right 10px bar backg
  • 如何使用 Talend tREST 上传文件?

    Experts 我需要使用 Talend tREST 组件将文件上传到 Zephyr JIRA 我不知道在 httpbody 部分中给出的格式 语法 例如curl的 F 电子邮件受保护 cdn cgi l email protection
  • 如果从本地数据库提取,LINQ-to-SQL 类不会实现 INotifyPropertyChanging 和 INotifyPropertyChanged

    我在 LINQ to SQL 类中修改了数据源 通过旧的删除和拖回方法 并惊讶地发现 INotifyPropertyChanging 和 INotifyPropertyChanged 接口不再在生成的类 MyDb designer cs 中
  • Minecraft 服务器的世界边界修剪脚本

    我正在尝试创建一个脚本 每天凌晨 5 点修剪 Minecraft 服务器的世界 到目前为止 它运行命令 wb NAME TRIM 其中 NAME 是世界的名称 然后运行命令 wb TRIM CONNECT 以初始化修剪过程 bin bash
  • 我可以在 firestore 中查询嵌套文档值吗?

    我想在 firestore 中搜索以下数据 收藏 gt 文档 gt date month 10 year 2017 var ref db collection collection doc document ref where date m
  • AWS Athena 对于 api 来说太慢了?

    计划是从 aws 数据交换获取数据 将其移动到 s3 存储桶 然后通过 aws athena 查询数据 api 一切正常 只是感觉有点慢 无论数据集还是查询 athena 响应时间都不能低于 2 秒 对于 API 来说 这已经太多了 我检查
  • Jooq批量记录插入

    我目前正在尝试批量插入许多记录 2000 而 Jooq 的batchInsert 没有执行我想要的操作 我将 POJO 转换为 UpdatableRecords 然后执行 batchInsert 它为每条记录执行插入 因此 Jooq 为每个
  • 从“int”到“const char*”的无效转换[重复]

    这个问题在这里已经有答案了 我在用着gcc在代码块上 我想编写一个使用记录数组的函数 但是我不断收到错误 invalid conversion from int to const char 代码 include
  • Pandas:获取去年同一天的值

    我正在寻找一种方法 如何获取前一年同一天的值 F e 我们有 2014 年 1 月 1 日的值 我想创建一个新列 其中包含这一天的值 但来自一年前 表的示例 我想获取 Previos Year 列 Date Ticks Previos Ye
  • 如何在训练期间每个时期结束时调用测试集?我正在使用张量流

    我正在使用 Tensorflow Keras 开发一个 CNN 模型 其中我将数据集分为训练集 验证集和测试集 我需要在每个时期结束时调用测试集以及训练集和验证集来评估模型性能 下面是我跟踪训练集和验证集的代码 result dic epo