layout: post

title: 2018-01-28-TF源码做版本兼容的一个粗暴方法

key: 20180128

tags: IT AI TF

modify_date: 2018-01-28

TF源码做版本兼容的一个粗暴方法

说明:

  • 本文发布于: gitee,github,博客园

  • 转载和引用请指明原作者和连接及出处.

  • 因为TF版本演进很快,不同版本间差别不小,github上的TF源码对应了0.10.0,0.11.0,1.0.1等不同TF版本,但一般你本地环境是一套TF,容易发现版本问题,非常累人。

  • 一个简单粗暴的解决办法是用try...except结构来做tf的版本兼容,这样不用到代码中修改每个函数,在开头做一些函数版本的判断和转换。

    • 比如: 下面示例代码,对“scalar_summary”和“concat_v2”函数的判断,新老TF如果不同,就可在这里做兼容,而保持程序主体逻辑不动。
  • 但这种try...except的结构在eclipse+pydev中会报错(红色波浪线),这是pydev编译器智能探测导致。解决如下:

    • 步骤1:只要进入菜单“windows-->Perferences-->PyDev-->Editor-->code anaylsis”后,调整右面的“undefined”和“import”的tab面板中的处理级别,将“error”改为“warning”。
    • 在eclipse中选中“abc.py”文件,右键菜单选择“pydev-->code analysis”来重新编译codes,则红色波浪线error不见了,整个程序可以run了。
from tensorflow.python.framework import ops
from utils import *
import tensorflow as tf
import math
import numpy as np #如下这个try except,通过异常来处理TF的版本兼容性问题!!!
#这里提供了一个思路,来兼容TF的新老格式差异问题,简单但实用!
try:
#import tensorflow as tf
#较老的TF的格式;
image_summary = tf.image_summary
scalar_summary = tf.scalar_summary
histogram_summary = tf.histogram_summary
merge_summary = tf.merge_summary
SummaryWriter = tf.train.SummaryWriter
except:
#如下是较新的TF的新格式,如果TRY中OLD格式失败则用新格式;
image_summary = tf.summary.image
scalar_summary = tf.summary.scalar
histogram_summary = tf.summary.histogram
merge_summary = tf.summary.merge
SummaryWriter = tf.summary.FileWriter if "concat_v2" in dir(tf):
def concat(tensors, axis, *args, **kwargs):
return tf.concat_v2(tensors, axis, *args, **kwargs)
else:
def concat(tensors, axis, *args, **kwargs):
return tf.concat(tensors, axis, *args, **kwargs) #....后续逻辑代码忽略,和本文主题无关...

2018-01-28-TF源码做版本兼容的一个粗暴方法的更多相关文章

  1. v74.01 鸿蒙内核源码分析(编码方式篇) | 机器指令是如何编码的 | 百篇博客分析OpenHarmony源码

    本篇关键词:指令格式.条件域.类型域.操作域.数据指令.访存指令.跳转指令.SVC(软件中断) 内核汇编相关篇为: v74.01 鸿蒙内核源码分析(编码方式) | 机器指令是如何编码的 v75.03 ...

  2. v75.01 鸿蒙内核源码分析(远程登录篇) | 内核如何接待远方的客人 | 百篇博客分析OpenHarmony源码

    子曰:"不学礼,无以立 ; 不学诗,无以言 " <论语>:季氏篇 百篇博客分析.本篇为: (远程登录篇) | 内核如何接待远方的客人 设备驱动相关篇为: v67.03 ...

  3. v76.01 鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式 | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(共享内存篇) | 进程间最快通讯方式 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样 ...

  4. v78.01 鸿蒙内核源码分析(消息映射篇) | 剖析LiteIpc(下)进程通讯机制 | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(消息映射篇) | 剖析LiteIpc(下)进程通讯机制 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析( ...

  5. v80.01 鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下) | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(内核态锁篇) | 如何实现快锁Futex(下) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...

  6. v82.01 鸿蒙内核源码分析 (协处理器篇) | CPU 的好帮手 | 百篇博客分析 OpenHarmony 源码

    本篇关键词:CP15 .MCR.MRC.ASID.MMU 硬件架构相关篇为: v65.01 鸿蒙内核源码分析(芯片模式) | 回顾芯片行业各位大佬 v66.03 鸿蒙内核源码分析(ARM架构) | A ...

  7. v87.01 鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main () | 百篇博客分析 OpenHarmony 源码

    本篇关键词:内核重定位.MMU.SVC栈.热启动.内核映射表 内核汇编相关篇为: v74.01 鸿蒙内核源码分析(编码方式) | 机器指令是如何编码的 v75.03 鸿蒙内核源码分析(汇编基础) | ...

  8. 如何从Linux源码获知版本信息

    /*************************************************************************** * 如何从Linux源码获知版本信息 * 声明 ...

  9. stl源码学习(版本2.91)--list

    stl源码学习(版本2.91)--list 一,阅读list()构造函数的收获 1,默认构造函数的作用和被调用的时机 struct no{ no(int i){} //no(){ // std::co ...

随机推荐

  1. 【个人笔记】《知了堂》ajax的get及post请求

    ajax 执行步骤 // 步骤 设置事件 调用函数 创建一个XHR对象 打开ajax通道,链接服务器,配置请求信息和参数 发送数据 设置回调函数 服务器接受请求,处理请求,查询数据库,响应 及 返回数 ...

  2. 【ASP.NET Core】在Win 10 的 Linux 子系统中安装 .NET Core

    在上一篇文章中,老周扯了一下在 Windows 10 中开启 Linux 子系统,并且进行了一些简单的设置.本篇咱们就往上面安装 .net core . 老周假设你从来没有用过 Linux,所以,接着 ...

  3. hbmy周赛1--E

    E - Combination Lock Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I6 ...

  4. 如何在VS2017中使用快捷键格式化代码?

    1.同时按住Ctrl键+A键,全选代码或要格式化的部分代码: 2.再按住Ctrl键,接着按一下K键,接着按一下F键.(注意:Ctrl键在按后面这2个键的时候一直是按着的,直到F键按完才松开).也就是俗 ...

  5. 数值积分之Simpson公式与梯形公式

    Simpson(辛普森)公式和梯形公式是求数值积分中很重要的两个公式,可以帮助我们使用计算机求解数值积分,而在使用过程中也有多种方式,比如复合公式和变步长公式.这里分别给出其简单实现(C++版): 1 ...

  6. [学习OpenCV攻略][006][平滑图片]

    cvCreateImage(图片大小,像素位数,通道数) 创建图片,根据输入的图片大小,各个通道像素点的位数,和通道数.像素点宏IPL_DEPTH_8U cvGetSize(图片) 得到图片的大小信息 ...

  7. Tree Recovery(由先、中序列构建二叉树)

    题目来源: http://poj.org/problem?id=2255 题目描述: Description Little Valentine liked playing with binary tr ...

  8. javascript数据类型及转换

    此篇数据类型和转换只限于ECMA规范,规范用了比较大的篇幅讲数据类型和类型转换,理解了这个最基本的概念对表达式.语句.执行环境.对象及继承都有非常大的帮助,遂整理如下: 数据类型和值 类型转换 表达式 ...

  9. 关于JWPlayer播放器的一些测试学习

    <!DOCTYPE html><html><head> <title>jwplayer播放器测试</title> <script ty ...

  10. iptabes的用法

    iptables的用法 基本用法: iptables [-t table] [subcommand] chain [rulenum] [options...] [match] [target] ipt ...