TensorFlow多线程输入数据处理框架(四)——输入数据处理框架

参考书

《TensorFlow:实战Google深度学习框架》(第2版)

输入数据处理的整个流程。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# coding=utf-8 

"""
@author: Li Tian
@contact: [email protected]
@software: pycharm
@file: sample_data_deal.py
@time: 2019/2/8 20:30
@desc: 输入数据处理框架
"""

from figuredata_deal.figure_deal_test2 import preprocess_for_train
import tensorflow as tf

# 创建文件列表,并通过文件列表创建输入文件队列。在调用输入数据处理流程前,需要统一所有原始数据的格式
# 并将它们存储到TFRecord文件中。下面给出的文件列表应该包含所有提供训练数据的TFRecord文件。
files = tf.train.match_filenames_once(‘file_pattern-*‘)
filename_queue = tf.train.string_input_producer(files, shuffle=False)

# 使用类似前面介绍的方法解析TFRecord文件里的数据。这里假设image中存储的是图像的原始数据,label为该
# 样例所对应的标签。height、width和channels给出了图片的维度。
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(
    serialized_example,
    features={
        ‘image‘: tf.FixedLenFeature([], tf.string),
        ‘label‘: tf.FixedLenFeature([], tf.int64),
        ‘height‘: tf.FixedLenFeature([], tf.int64),
        ‘width‘: tf.FixedLenFeature([], tf.int64),
        ‘channels‘: tf.FixedLenFeature([], tf.int64),
    }
)
image, label = features[‘image‘], features[‘label‘]
height, width = features[‘height‘], features[‘width‘]
channels = features[‘channels‘]

# 从原始图像数据解析出像素矩阵,并根据图像尺寸还原图像。
decoded_image = tf.decode_raw(image, tf.uint8)
decoded_image.set_shape([height, width, channels])
# 定义神经网络输入层图片的大小
image_size = 299
# preprocess_for_train为前面提到的图像预处理程序
distorted_image = preprocess_for_train(decoded_image, image_size, image_size, None)

# 将处理后的图像和标签数据通过tf.train.shuffle_batch整理成神经网络训练时需要的batch。
min_after_dequeue = 10000
batch_size = 100
capacity = min_after_dequeue + 3 * batch_size
image_batch, label_batch = tf.train.shuffle_batch([distorted_image, label], batch_size=batch_size, capacity=capacity, min_after_dequeue=min_after_dequeue)

# 定义神经网络的结构以及优化过程, image_batch可以作为输入提供给神经网络的输入层。
# label_batch则提供了输入batch中样例的正确答案。
# 学习率
learning_rate = 0.01
# inference是神经网络的结构
logit = inference(image_batch)
# loss是计算神经网络的损失函数
loss = cal_loss(logit, label_batch)
# 训练过程
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

# 声明会话并运行神经网络的优化过程
with tf.Session() as sess:
    # 神经网络训练准备工作。这些工作包括变量初始化、线程启动。

    sess.run((tf.global_variables_initializer(), tf.local_variables_initializer()))
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)

    # 神经网络训练过程。
    TRAINING_ROUNDS = 5000
    for i in range(TRAINING_ROUNDS):
        sess.run(train_step)

    # 停止所有线程
    coord.request_stop()
    coord.join(threads)

原文地址:https://www.cnblogs.com/lyjun/p/10356762.html

时间: 2024-10-15 05:40:23

TensorFlow多线程输入数据处理框架(四)——输入数据处理框架的相关文章

Struts2框架学习(三) 数据处理

Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:ValueStack一种数据结构,操作数据的方式为:先进后出 OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技

javaIO流(四)--输入与输出支持

一.打印流 如果现在要想通过程序实现内容的输出,核心的本质一定要依靠OutputStream类来支持但是OutputStream类有一个最大的缺点,这个类的数据输出操作功能有限,所有的数据一定要转为字节数组后才可以进行才操作:public void write(byte b[]) throws IOException,假设说项目中可能输出的是long,double,date,在这样的情况下就必须将这些数据转变为字节的形式来进行处理,这样的处理一定是非常麻烦的.所以在开发之中最初的时候为了解决此类

《Effective C#》快速笔记(四)- 使用框架

.NET 是一个类库,你了解的越多,自己需要编写的代码就越少. 目录 三十.使用重写而不是事件处理函数 三十一.使用 IComparable<T> 和 IComparer<T> 实现顺序关系 三十二.避免使用 ICloneable 接口 三十三.仅用 new 修饰符处理基类更新 三十四.避免重载基类中定义的方法 三十五.PLINQ 如何实现并行算法 三十六.理解 PLINQ 在 I/O 密集场景 三十七.注意并行算法中的异常 三十.使用重写而不是事件处理函数 1.处理系统之中触发的

线程同步-iOS多线程编程指南(四)-08-多线程

首页 编程指南 Grand Central Dispatch 基本概念 多核心的性能 Dispatch Sources 完结 外传:dispatch_once(上) Block非官方编程指南 基础 内存管理 揭开神秘面纱(上) 揭开神秘面纱(下) iOS多线程编程指南 关于多线程编程 线程管理 Run Loop 线程同步 附录 Core Animation编程指南 Core Animation简介 基本概念 渲染架构 几何变换 查看目录 中文手册/API ASIHTTPRequest Openg

java I/O框架 (四)文件流

文件读取 FileInputStream FileReader 文件写入 FileOutputStream FileWriter 随机文件读写 RandomAccessFile 一.文件读取 FileInputStream和FileReader是文件字节输入流和文件字符输入流,都是提供文件读取功能,只是读取形式不同,一个以字节为最小单位读取,一个以字符为最小单位读取,并且两者都必须从文件头开始,按顺序读取,读取结束后需要调用close()方法释放流对象. 两个文件输入流的有参构造方法一致,以Fi

【十四】注入框架RoboGuice使用总结

在我们平时开发Android项目的时候例如经常需要使用各种View控件,然后进行声明,findViewById,并且进行强转.每次都要写这样的代码就显得非常繁琐,并且容易出错哦.那么针对这种情况且不限定于以上的这类情况,Dependency injection 可以大大降低了类之间的依赖性,可以通过annotation (Java)描述类之间的依赖性,避免了直接调用类似的构造函数或是使用Factory来参加所需的类,从而降低类或模块之间的耦合性,以提高代码重用并增强代码的可维护性.Google

误差输入点和原始信号输入点之间的通路增益对系统的影响 自动控制原理

误差输入点和原始信号输入点之间的通路增益对系统的影响 当R作用时,N=0; 系统是常见的二阶单位反馈系统 在阶跃信号作用下 闭环传递函数当s->0时 ess = s->0          s*E(s) = s*(R(s)-C(s)) 于是稳态误差ess = 0 当N作用时,R =0; 系统是常见的二阶单位反馈系统,反馈增益H(s) = K1 为常数 在误差为阶跃信号作用下 enss = s->    s*(误差传递函数(s)) = s*(K2/(T*s^2+s+K1*K2))*(R(s

胖虎谈ImageLoader框架(四)

前言 从学校出来的这半年时间,发现很少有时间可以静下来学习和写博文了,为了保持着学习热情,我希望自己抽出一部分时间来写一些Android框架源码阅读后的理解系列博文. 期许:希望可以和大家一起学习好此框架,也希望大家看博文前最好是先了解下框架的基本使用场景和使用方法,有什么问题可以留言给我,交流学习. 当然,再好的博文,也不如自己看一遍源码! 这次为大家带来的是<胖虎谈ImageLoader框架>系列,分析优秀的框架源码能让我们更迅速地提升,大家共勉!! 源码包下载地址:http://down

编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。

编写一个程序,从标准输入读取几行输入.每行输入都要打印到标准输出上,前面加上行号. 在编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制. #include <stdio.h> #include <stdlib.h> int main() { char ch = '0'; int n = 1; int flag = 1; while (1) { printf("please input the line: "); do { scanf("%c

Ext,保存输入记录并在输入时进行提示

Ext的ComboBox组件用法很多,通过配置可以让其变成一个输入框,并且可以存储输入的记录,然后再之后的输入中根据记录进行提示,以提高输入操作的用户体验. 代码很简单,基本操作如下: // 输入提示 Ext.create("Ext.form.ComboBox", { renderTo: "放置的组件ID", name: "input", labelWidth: 40, width: 400, hideEmptyLabel: true, // 隐