tf.train.batch 的偶尔乱序问题
时间:2022-07-23
本文章向大家介绍tf.train.batch 的偶尔乱序问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
tf.train.batch 的偶尔乱序问题
- 我们在通过 tf.Reader 读取文件后,都需要用 batch 函数将读取的数据根据预先设定的 batch_size 打包为一个个独立的 batch 方便我们进行学习。
- 常用的 batch 函数有 tf.train.batch 和 tf.train.shuffle_batch 函数。前者是将数据从前往后读取并顺序打包,后者则要进行乱序处理————即将读取的数据进行乱序后在组成批次。
- 训练时我往往都是使用 shuffle_batch 函数,但是这次我在验证集上预调好模型并 freeze 模型后我需要在测试集上进行测试。此时我需要将数据的标签和 inference 后的结果进行一一对应。此时数据出现的顺序是十分重要的,这保证我们的产品在上线前的测试集中能准确 get 到每个数据和 inference 后结果的差距 而在验证集中我们不太关心数据原有的标签和 inference 后的真实值,我们往往只是需要让这两个数据一一对应,关于数据出现的顺序我们并不关心。
- 此时我们一般使用 tf.train.batch 函数将 tf.Reader 读取的值进行顺序打包即可。
然而 tf.train.batch 函数往往会有偶尔乱序的情况
- 我们将 csv 文件中每个数据样本从上往下依次进行标号,我们在使用 tf.trian.batch 函数依次进行读取,如果我们读取的数据编号乱序了,则表明 tf.train.batch 函数有偶尔乱序的状况。
源程序文件下载[1]test_tf_train_batch.csv[2]
import tensorflow as tf
BATCH_SIZE = 400
NUM_THREADS = 2
MAX_NUM = 500
def read_data(file_queue):
reader = tf.TextLineReader(skip_header_lines=1)
key, value = reader.read(file_queue)
defaults = [[0], [0.], [0.]]
NUM, C, Tensile = tf.decode_csv(value, defaults)
vertor_example = tf.stack([C])
vertor_label = tf.stack([Tensile])
vertor_num = tf.stack([NUM])
return vertor_example, vertor_label, vertor_num
def create_pipeline(filename, batch_size, num_threads):
file_queue = tf.train.string_input_producer([filename]) # 设置文件名队列
example, label, no = read_data(file_queue) # 读取数据和标签
example_batch, label_batch, no_batch = tf.train.batch(
[example, label, no], batch_size=batch_size, num_threads=num_threads, capacity=MAX_NUM)
return example_batch, label_batch, no_batch
x_train_batch, y_train_batch, no_train_batch = create_pipeline('test_tf_train_batch.csv', batch_size=BATCH_SIZE,
num_threads=NUM_THREADS)
init_op = tf.global_variables_initializer()
local_init_op = tf.local_variables_initializer()
with tf.Session() as sess:
sess.run(local_init_op)
sess.run(init_op)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
example, label, num = sess.run([x_train_batch, y_train_batch, no_train_batch])
print(example)
print(label)
print(num)
coord.request_stop()
coord.join(threads)
实验结果
我们将 csv 文件中的真实 Tensile 值放在第一列,将使用 tf.train.batch 函数得到的 Tensile 和 no 分别放在第二列和第三列
TureTensile |
FalseTensile |
NO |
---|---|---|
0.830357143 |
[ 0.52678573] |
[ 66] |
0.526785714 |
[ 0.83035713] |
[ 65] |
0.553571429 |
[ 0.4375 ] |
[ 68] |
0.4375 |
[ 0.5535714 ] |
[ 67] |
0.517857143 |
[ 0.33035713] |
[ 70] |
0.330357143 |
[ 0.51785713] |
[ 69] |
0.482142857 |
[ 0.6785714 ] |
[ 72] |
0.678571429 |
[ 0.48214287] |
[ 71] |
0.419642857 |
[ 0.02678571] |
[ 74] |
0.026785714 |
[ 0.41964287] |
[ 73] |
0.401785714 |
[ 0.4017857 ] |
[ 75] |
解决方案
- 将测试集中所有样本数据加 NO 顺序标签列
参考资料
[1]源程序文件下载: https://github.com/Asurada2015/Python-Data-Analysis-Learning-Notes/blob/master/TensorFlow/demo_00/test_tf_train_batch.py
[2]test_tf_train_batch.csv: https://github.com/Asurada2015/Python-Data-Analysis-Learning-Notes/blob/master/TensorFlow/demo_00/test_tf_train_batch.csv
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
- PHP Include文件实例讲解
- ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
- Python Switch Case三种实现方法代码实例
- PHP正则表达式笔记与实例详解
- php实现微信分享朋友链接功能
- python交互模式基础知识点学习
- 浅析Python 抽象工厂模式的优缺点
- 基于PyTorch的permute和reshape/view的区别介绍
- Laravel配置全局公共函数的方法步骤
- PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
- python–shutil移动文件到另一个路径的操作
- PHP正则表达式处理函数(PCRE 函数)实例小结
- yii2的restful api路由实例详解
- PHP实现的权重算法示例【可用于游戏根据权限来随机物品】