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



    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)
    
    
    
    #....后续逻辑代码忽略,和本文主题无关...
    
  • 相关阅读:
    vue脚手架搭建项目步骤(转载)
    使用css样式设置按钮禁用
    如何设置页面文本不可复制?
    System.IO.IOException:需要的特权不被客户端持有。
    vs中 git fetch与git pull的区别
    如何获取按钮开关选中的状态?
    Uncaught TypeError: XXX is not a function...
    解决bootstrap缩小布局会乱的问题,缩小一定程度后出现横向滚动条
    日期(年月日)与时间戳互转换
    Java中的Finally
  • 原文地址:https://www.cnblogs.com/taichu/p/8371289.html
Copyright © 2020-2023  润新知