tensorflow代码组织格式

深度学习tensorflow实战笔记(2)图像转换成tfrecords和读取      上一篇博客介绍了如何把自己的一般数据放进去txt文件并读取训练全连接神经网络(多层感知机),但是如何把自己的图像数据投入到神经网络中做训练呢,当然,可以把图像写入到txt文件中,然后做reshape,这种方法效率太低,操作复杂,并且内存占用率太高。所以本篇博客介绍如何把自己的图像数据转成tensorflow平台标注的tfrecords格式,并读取tfrecords数据。下一篇博客介绍如何... 阅读详情

撰写时间:2017.8.16

tensorflow代码组织

tensorflow的源代码中有很多example,从那些大牛们的源代码中我们其实可以学到很多有关tensorflow的代码格式应该如何排版。但是由于tf项目组的人有很多,代码格式也是参差不齐,所以这篇博文也就是总结一些博主在实际使用tensorflow中常用的代码组织的结构。



该篇博文按照博主的代码格式变化的时间顺序组织

简单的代码组织

  • tensorflow中将所有的操作都看做是节点,所有的节点组成一个前驱图,也就是tensorflow中提到的Graph计算图结构。
  • tensorflow的另一个模块是session模块,通过session为之前建立好的Graph“喂(feed)数据”,然后从图的末端fetch需要的结果。
  • 所以最简单的代码组织就是将这两个模块分开。先建立计算图,然后通过会话模块运行计算图。

    #coding:utf-8
    #######softmax
    
    import tensorflow as tf
    import numpy as np 
    from tensorflow.examples.tutorials.mnist import input_data
    
    ######prepare data
    mnist = input_data.read_data_sets('MNIST_data/',one_hot = True);
    
    
    #######create the graph,定义图中所有的计算节点的依赖关系
    x = tf.placeholder(tf.float32,shape = [None,784],name = 'x');
    y_ = tf.placeholder(tf.float32,shape = [None,10],name = 'y_');
    W = tf.Variable(tf.zeros([784,10]));
    b = tf.Variable(tf.zeros([10]),name = 'input_bias');
    y = tf.nn.softmax(tf.matmul(x,W) + b)
    cross_entropy = -tf.reduce_sum(y_*tf.log(y))
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float32"))
    
    #set sess as default,定义会话
    sess = tf.InteractiveSession();
    init = tf.global_variables_initializer();
    sess.run(init);
    ##通过会话运行图
    for i in range(1000):
        batch = mnist.train.next_batch(100);
        sess.run(train_step,feed_dict={x: batch[0], y_: batch[1]})
        if i % 50 == 0:
            print "Setp: ", i, "Accuracy: ",sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
    
    print(accuracy.eval(session=sess,feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
    

    使用函数

    在tensorflow的官方教程:TensorFlow Mechanics 101中提到

    the graph is built from the mnist.py file according to a 3-stage pattern: inference(), loss(), and training().

    • inference() - Builds the graph as far as is required for running the network forward to make predictions.
    • loss() - Adds to the inference graph the ops required to generate loss.
    • training() - Adds to the loss graph the ops required to compute and apply gradients.

    说明在建图的过程中,如果图的结构特别复杂,所有的代码都写在一起就会非常的混乱,所以我们就可以将代码通过函数的形式分开。下面是通过函数的形式实现两层DNN+softmax的mnist手写体的多分类问题。代码如下:

    import tensorflow as tf
    import math
    # The output classes.representing the digits from 0 to 9
    NUMCLASS = 10;
    ## 
    IMAGE_SIZE = 28;
    IMAGE_PIXELS = IMAGE_SIZE*IMAGE_SIZE;
    def inference(images,hidden1_unit,hidden2_unit):
        """build the graph
        Args:
          images:Image placeholder.Size[batchsize*IMAGE_PIEXLS]
          hidden1_unit:Size of first hidden layer.
          hidden2_unit:Size of second hidden layer.
        Returns:
          softmax_linear: Output tensor with the computed logits.
        """
        #hidden1
        with tf.name_scope('hidden1'):
            weights = tf.Variable(tf.truncated_normal([IMAGE_PIXELS,hidden1_unit],
                stddev = 1/math.sqrt(float(hidden2_unit))),name = 'weights');
            bias = tf.Variable(tf.zeros([hidden1_unit]),name = 'bias');
            hidden1 = tf.nn.relu(tf.matmul(images,weights)+bias);
        #hidden2
        with tf.name_scope('hidden2'):
            weights = tf.Variable(tf.truncated_normal([hidden1_unit,hidden2_unit],
                stddev = 1/math.sqrt(float(hidden2_unit))),name = 'weights');
            bias = tf.Variable(tf.zeros([hidden2_unit]),name = 'bias');
            hidden2 = tf.nn.relu(tf.matmul(hidden1,weights)+bias);
        #softmax layer
        with tf.name_scope('softmax_layer'):
            weights = tf.Variable(tf.truncated_normal([hidden2_unit,NUMCLASS],
                stddev = 1/math.sqrt(float(hidden2_unit))),name ='weights');
            bias = tf.Variable(tf.zeros([NUMCLASS]),name = 'bias');
            logits = tf.matmul(hidden2,weights)+bias;
        return logits;
    
    def loss(labels,logits):
        """Calculates the loss from the logits and the labels.
        Args:
        labels: Labels tensor, int32 - [batch_size].
        logits: Logits tensor, float - [batch_size, NUM_CLASSES].
        Return: Loss tensor of type float
        """
        labels = tf.to_int64(labels)
        with tf.name_scope('loss'):
            cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits = logits, labels = labels, name='xentropy')
            loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
        return loss
    
    def training(loss,learning_rate):
        """Sets up the training Ops.
        Creates a summarizer to track the loss over time in TensorBoard.
        Creates an optimizer and applies the gradients to all trainable variables.
        The Op returned by this function is what must be passed to the
        `sess.run()` call to cause the model to train.
        Args:
            loss: Loss tensor, from loss().
            learning_rate: The learning rate to use for gradient descent.
        Returns:
            train_op: The Op for training.
        """
    
        tf.summary.scalar('loss',loss);
        # Create the gradient descent optimizer with the given learning rate.
        optimizer = tf.train.GradientDescentOptimizer(learning_rate)
        # Create a variable to track the global step.
        global_step = tf.Variable(0, name='global_step', trainable=False)
        # Use the optimizer to apply the gradients that minimize the loss
        # (and also increment the global step counter) as a single training step.
        train_op = optimizer.minimize(loss, global_step=global_step)
        return train_op
    
    def evaluation(labels,logits):
        """Evaluate the quality of the logits at predicting the label.
        Args:
            logits: Logits tensor, float - [batch_size, NUM_CLASSES].
            labels: Labels tensor, int32 - [batch_size], with values in the
            range [0, NUM_CLASSES).
        Returns:
            A scalar int32 tensor with the number of examples (out of batch_size)
            that were predicted correctly.
        """
        # For a classifier model, we can use the in_top_k Op.
        # It returns a bool tensor with shape [batch_size] that is true for
        # the examples where the label is in the top k (here k=1)
        # of all logits for that example.
        correct = tf.nn.in_top_k(logits, labels, 1)
        # Return the number of true entries.
        #cast(x,dtype),transform x into dtype.
        return tf.reduce_sum(tf.cast(correct, tf.int32))

    关于如何调用,可以参考主函数的实现。github地址,代码中的run_training函数就是上面提到的training函数。

    使用类CLASS

    上述的代码组织结构的问题在于

  • 1.很难支持模型复用,也就是面向过程与面向对象的差别
  • 2.没有涉及到数据的处理。因为所有的数据都是使用常用数据集,使用别人写好的api
  • 所以下面的内容涉及的就是关于使用类重构代码以及写自己的数据集api
    下面的内容主要是数据类和模型类中常用的一些函数,以及具体的实例代码github(代码是一个使用cnn网络识别图像的多分类问题)

    数据类(图像数据示例)

    class DataSet(object):
        def __init__():
        @property
        def images():
        @property
        def labels():
        @property
        def num_examples():
        @property
        def epoches_completed():
        def next_batch():

    实例代码

    计算model类

    class Model(object):
        def __init__():
        @lazy_property
        def inference():
        @lazy_property
        def optimize():
        @lazy_property
        def error():

    实例代码
    主函数代码
    这个项目还在测试中,所以主函数的测试数据还没有喂到模型中。主要看代码结构吧

    问题1:为什么在model中使用lazy_property?
    首先要明白model中的所有函数都是用来建立计算图的,所以每一个函数运行一次和运行多次,那么建立的图的结构就会不同。为lazy_property的作用就是在函数运行一次之后,第二次调用的时候就不在运行,而是直接返回结果。

    def lazy_property(func):
        attr_name = "_lazy_" + func.__name__
        @property
        def _lazy_property(self):
            if not hasattr(self, attr_name):
                setattr(self, attr_name, func(self))
            return getattr(self, attr_name)
        return _lazy_property

    参考地址
    问题2:主函数中的代码组织结构?
    回答:主函数中主要使用第三方包argparse解析参数,代替了tensorflow中的官方配置文件的方式。如果你是新手,可以直接使用和我代码中一样的格式,我的代码格式也是模仿的别人。

制作tensorflow数据集 1首先准备好自己图片数据集,我是用cifar10 的其中五个类别,分别是bird,car ,cat,deer,plane。五个类别数据分开放置。例如:然后就是根据数据集生成tfrecord,生成的是protobuf(二进制文件,加速文件传输和处理速度),代码如下<import tensorflow as tfimport osimport randomimport mathimport sy... 阅读详情

相关推荐

TensorFlow2.0模型格式转换为.pb格式

本文主要介绍如何将tensorflow2.0模型转化为.pb格式。

qq_37116150的博客 1万+

TensorFlow笔记:从零开始的代码实现

这篇笔记包括了TensorFlow从读取数据开始,模型初始化和拟合,到使用TensorBoard查看结果的全流程。整理了一些常见的、包括版本更新引起的bug。

HgCH3的博客 1200

tensorflow保存数据为.pb格式和加载pb文件

最近接触了tensorflow的object detection API发现里面读取的预先训练模型都是pb格式。谷歌推荐的保存模型的方式是保存模型为 PB 文件,它具有语言独立性,可独立运行,封闭的序列化格式,任何语言都可以解析它,它允许其他语言和深度学习框架读取、继续训练和迁移 TensorFlow 的模型。它的主要使用场景是实现创建模型与使用模型的解耦, 使得前向推导 inference的代码...

fu6543210的博客 6万+

TensorFlow官方文档标准TensorFlow格式

标准TensorFlow格式另一种保存记录的方法可以允许你讲任意的数据转换为TensorFlow所支持的格式, 这种方法可以使TensorFlow的数据集更容易与网络应用架构相匹配。这种建议的方法就是使用TFRecords文件,TFRecords文件包含了tf.train.Example协议内存块(protocol buffer)(协议内存块包含了字段 Features)。你可以写一段代码获取你的...

HowardWood的博客 883

TensorFlow2.x冻结模型,保存为.pb格式方便部署

1、用tf.keras创建模型 inputs = tf.keras.Input(shape=(1000, 9,), name='input') input = tf.keras.layers.Flatten(name="flatten")(inputs) f1 = tf.keras.layers.Dense(512, activation='relu', name='dense_1')(input) d1 = tf.keras.layers.Dropout(0.2,name='dropout_1')(f1)

布布汪的博客 9157

谷歌TensorFlow模型使用模板

简洁而精密的结构对于深度学习项目来说是必不可少的,在经过多次练习和 TensorFlow 项目开发之后,这是一个结合简便性、优化文件结构和良好 OOP 设计的 TensorFlow 项目模板。该模板可以帮助你快速启动自己的 TensorFlow 项目,直接从实现自己的核心思想开始。

Tensorflow代码目录组织

今天了解一下tensorflow的项目组织结构,其github链接如下:https://github.com/tensorflow/tensorflow   Tensorflow/core目录包含了TF核心模块代码。         public: API接口头文件目录,用于外部接口调用的API定义,主要是session.h 和tensor_c_api.h。         clien...

u011926899的专栏 568

树莓派部署Home Assistant:打造本地化智能家居大脑

家庭自动化旨在通过技术提升居住便利性与舒适度,其核心在于中枢控制系统对各类设备的统一调度。传统云端方案虽部署简便,但存在隐私泄露、网络依赖与生态壁垒等固有缺陷。本地化部署通过将控制逻辑与数据存储于家庭内部网络,从根本上解决了这些问题,实现了数据自主、离线可用与跨品牌联动。Home Assistant作为领先的开源家庭自动化平台,结合树莓派这一低功耗、高性价比的硬件载体,为构建私有、可靠的智能家居中枢提供了成熟方案。本文以树莓派4B为例,详细阐述了从系统安装、设备集成到自动化场景创建的完整实践流程,并深入探讨

weixin_33501543的博客 374

TensorFlow 到底有几种模型格式?

  用过 TensorFlow 时间较长的同学可能都发现了 TensorFlow 支持多种模型格式,但这些格式都有什么区别?怎样互相转换?今天我们来一一探索。 1. CheckPoint(*.ckpt) 在训练 TensorFlow 模型时,每迭代若干轮需要保存一次权值到磁盘,称为“checkpoint”,如下图所示: 这种格式文件是由 tf.train.Saver() 对象调用 sa...

梦沁清风 1万+

电力电子新手必看:COT控制模式的工作原理与典型应用场景解析

本文深入解析了COT控制模式的工作原理及其在电力电子领域的典型应用。COT控制(恒定导通时间控制)通过固定导通时间机制,解决了传统滞环控制的问题,特别适用于需要快速瞬态响应和高效率的应用场景,如CPU/GPU供电和便携设备电源管理。文章详细介绍了COT控制的核心流程、技术特点及设计实践中的关键考量,帮助电力电子新手快速掌握这一技术。

weixin_30745553的博客 522

Simulink Test Sequence自动化测试实战:从Excel到模型验证

本文详细介绍了如何利用Excel和MATLAB脚本实现Simulink Test Sequence的自动化测试。通过设计结构化Excel模板管理测试数据,并调用Simulink Test API批量创建与执行测试用例,该方法能显著提升复杂模型单元测试的效率,便于集成到CI/CD流程,实现从数据到验证的全自动化。

weixin_29261711的博客 144

tensorflow代码组织格式(转)

https://blog.youkuaiyun.com/selous/article/details/77197845 转载于:https://www.cnblogs.com/yifdu25/p/8975442.html

weixin_30502157的博客 111

科研智能体平台搭建与实战:大模型如何驱动科研自动化

大模型技术的快速发展,正推动AI智能体从单纯对话工具向主动执行任务的科研伙伴演进。智能体的核心原理在于整合模型调用、工具使用、知识库检索与工作流编排,使其能够自主拆解目标、执行操作并迭代优化。在科研场景中,这一技术价值尤为突出:文献初筛、实验数据清洗、代码调试、结果汇总等高频重复劳动均可实现自动化,大幅释放研究者精力。从基础组件配置到多智能体协同,从平台选型到提示词调优,实际落地需要关注模型匹配、工具稳定性、记忆管理与人机校验机制。本文基于真实工程经验,系统梳理科研智能体平台的搭建路径、应用案例与高频问题排

weixin_32597009的博客 285

使用tensorflow将图像数据集制作成tfrecords格式(代码)

只有几串代码,快速实现,但是原理没有详细说明。 使用tensorflow-gpu 2以上版本: BATCH_SIZE = 2 train_dir = "C:\\Users\Desktop\泸州老窖精品头曲组合装\\" train_tfrecord = "C:\\Users\Desktop\\train.tfrecords" dataset_to_tfrecord(dataset_dir=train_dir, tfrecord_name=train_tfrecord) 自定义函数如下: def .

qiuuu的博客 1297

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

《湖科大教书匠计算机网络》学习笔记总目录+思维导图

本篇文章是对《湖科大教书匠计算机网络》所有知识点的笔记总结归档和计算机网络的思维导图

weixin_73077810的博客 8251

TensorFlow学习宝典:如何快速掌握TensorFlow-Course的完整教程结构

TensorFlow-Course是一个专为初学者和普通用户设计的TensorFlow学习项目,提供简单易用的教程和代码实现。这个开源项目旨在帮助用户快速掌握TensorFlow深度学习框架的核心概念和实际应用技巧。通过精心设计的模块化结构和循序渐进的学习路径,即使是机器学习新手也能轻松入门TensorFlow。 ## 🎯 项目核心结构概览 TensorFlow-Course采用清晰的分层架

gitblog_00116的博客 406

YOLOv11【第二章:核心模块进阶篇·第28节】DynamicHead动态检测头设计!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 1万+

利用文件夹分类图像来生成TFRecord格式文件

利用文件夹分类图像,来把我们所需要用到的图像数据集转成相应的TFRecord格式文件,以便我们后续的使用。 文件夹的名字为标签名字,相应的文件夹里面存放此类标签的数据图像。 文件夹格式如下: "0"-文件夹: img1.jpg img2.jpg img3.jpg ····· "1"-文件夹: img1.jpg img2.jpg ····· "2"-文件夹: img1.jpg ...

Sincky的博客 1330

手把手教你学RDMA驱动开发专栏--第7章 队列对(QP)与数据传输实现​7.3 完成队列(CQ):事件通知机制与轮询/中断模式

本章详细探讨了RDMA驱动中完成队列(CQ)的事件通知机制,重点分析了轮询与中断两种模式的实现原理及优化策略。CQ作为操作结果的报告载体,其核心功能包括结果反馈、事件通知和资源同步。轮询模式通过主动查询实现低延迟,适合高性能场景;中断模式通过被动通知节省CPU资源,适用于低频事件处理。驱动实现需考虑CQ溢出防护、多QP共享同步等关键问题,并提供事件通道机制将CQE传递给用户态。通过对比两种模式的优缺点及适用场景,揭示了RDMA系统在性能与资源间的权衡机制。

MHD0815的博客 396

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

PyTorch 与 TensorFlow 模型保存格式全解析与代码示例

在深度学习模型训练完成后,如何保存和加载模型是每个开发者都会面临的问题。不同框架提供了多种模型保存格式,每种格式都有其特点和适用场景。本文将面向中级开发者,系统介绍 PyTorch 和 TensorFlow 中常见的模型保存格式,包括 PyTorch 的.pth/.pt(原生格式)和ONNX,以及 TensorFlow 的SavedModelHDF5 (.h5)、协议缓冲文件(.pb)和。我们将解析每种格式所包含的内容,给出保存与加载的代码示例,比较它们的区别,讨论转换方法,并分享常见坑点与最佳实践建议。

m0_46808930的博客 2625

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Tensorflow各种推理格式转换以及代码

Tensorflow 将 ckpt 转成 pb 格式 使用 tf.train.saver()保存模型时会产生多个文件,会把计算图的结构和图上参数取值分成了不同的文件存储。这种方法是在TensorFlow中是最常用的保存方式。例如:下面的代码运行后,会在save目录下保存了四个文件: import tensorflow as tf v1 = tf.Variable(tf.random_normal([1, 2]), name="v1") v2 = tf.Variable(tf.random_normal(

weixin_43953700的博客 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Tensorflow】你可能无法回避的 TFRecord 文件格式详细讲解

如果你是 Tensorflow 的初学者,那么你或多或少在网络上别人的博客上见到过 TFRecord 的影子,但很多作者都没有很仔细地对它进行说明,这也许会让你感受到了苦恼。本文按照我自己的思路对此进行一番讲解,也许能够提供给你一些帮助。 TFRecord 是什么? TFRecord 是谷歌推荐的一种二进制文件格式,它可以将任何信息按照特定的格式转换成二进制。 TFRecord 的核心内容在...

frank 的专栏 3万+

keras和tensorflow保存为可部署的pb格式

github博客传送门 博客园传送门 Keras保存为可部署的pb格式 加载已训练好的.h5格式的keras模型 传入如下定义好的export_savedmodel()方法内即可成功保存 import keras import os import tensorflow as tf from tensorflow.python.util import compat from keras import...

Mrzhang 3728

tensorflow模型部署系列————预训练模型导出(附代码)

摘要 本文为系列博客tensorflow模型部署系列的一部分,用于为模型部署提供最开始的输入————标准化的模型文件。 引言 本文为系列博客tensorflow模型部署系列的一部分,用于为模型部署提供最开始的输入————标准化的模型文件。相关示例代码放在gdyshi的github上 主题 可保存的模型格式有多种,本文仅针对 tensorflow 的默认格式ckpt、 keras 的默认格式h5和...

gdyshi的博客 5373

Tensorflow模型的格式

tensorflow模型的格式通常支持多种,主要有CheckPoint(*.ckpt)、GraphDef(*.pb)、SavedModel。 1. CheckPoint(*.ckpt) 在训练 TensorFlow 模型时,每迭代若干轮需要保存一次权值到磁盘,称为“checkpoint”,如下图所示: 文件中的meta为网络结构,data为权重。注意加载时的模型文件路径为:model.ckpt。 这种格式文件是由 tf.train.Saver() 对象调用 saver.save() ..

豆芽菜 559
上一篇: tensorflow共享变量
下一篇: GANs实现(Generative Adversarial Networks)
selous
博客等级 码龄12年 89粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值