tensorflow2.0的函数签名与图结构(推荐)


Posted in Python onApril 28, 2020

input_signature的好处:

1.可以限定函数的输入类型,以防止调用函数时调错,

2.一个函数有了input_signature之后,在tensorflow里边才可以保存成savedmodel。在保存成savedmodel的过程中,需要使用get_concrete_function函数把一个tf.function标注的普通的python函数变成带有图定义的函数。

下面的代码具体体现了input_signature可以限定函数的输入类型这一作用。

@tf.function(input_signature=[tf.TensorSpec([None], tf.int32, name='x')])
def cube(z): #实现输入的立方
 return tf.pow(z, 3)
try:
 print(cube(tf.constant([1., 2., 3.])))
except ValueError as ex:
 print(ex)
print(cube(tf.constant([1, 2, 3])))

输出:

Python inputs incompatible with input_signature:
  inputs: (
    tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32))
  input_signature: (
    TensorSpec(shape=(None,), dtype=tf.int32, name='x'))
tf.Tensor([ 1  8 27], shape=(3,), dtype=int32)

get_concrete_function的使用

note:首先说明,下面介绍的函数在模型构建、模型训练的过程中不会用到,下面介绍的函数主要用在两个地方:1、如何保存模型 2、保存好模型后,如何载入进来。

可以给 由@tf.function标注的普通的python函数,给它加上input_signature, 从而让这个python函数变成一个可以保存的tensorflow图结构(SavedModel)

举例说明函数的用法:

@tf.function(input_signature=[tf.TensorSpec([None], tf.int32, name='x')])
def cube(z):
 return tf.pow(z, 3)
 
try:
 print(cube(tf.constant([1., 2., 3.])))
except ValueError as ex:
 print(ex)
 
print(cube(tf.constant([1, 2, 3])))
 
# @tf.function py func -> tf graph
# get_concrete_function -> add input signature -> SavedModel
 
cube_func_int32 = cube.get_concrete_function(
 tf.TensorSpec([None], tf.int32)) #tensorflow的类型
print(cube_func_int32)

输出:

<tensorflow.python.eager.function.ConcreteFunction object at 0x00000240E29695C0>

从输出结果可以看到:调用get_concrete_function函数后,输出的是一个ConcreteFunction对象

#看用新参数获得的对象与原来的对象是否一样
print(cube_func_int32 is cube.get_concrete_function(
 tf.TensorSpec([5], tf.int32))) #输入大小为5
print(cube_func_int32 is cube.get_concrete_function(
 tf.constant([1, 2, 3]))) #传具体数据

输出:

True
True

cube_func_int32.graph #图定义

输出:

[<tf.Operation 'x' type=Placeholder>,
 <tf.Operation 'Pow/y' type=Const>,
 <tf.Operation 'Pow' type=Pow>,
 <tf.Operation 'Identity' type=Identity>]
pow_op = cube_func_int32.graph.get_operations()[2]
print(pow_op)

输出:

name: "Pow"
op: "Pow"
input: "x"
input: "Pow/y"
attr {
  key: "T"
  value {
    type: DT_INT32
  }
}

print(list(pow_op.inputs))
print(list(pow_op.outputs))

输出:

[<tf.Tensor 'x:0' shape=(None,) dtype=int32>, <tf.Tensor 'Pow/y:0' shape=() dtype=int32>]
[<tf.Tensor 'Pow:0' shape=(None,) dtype=int32>]

cube_func_int32.graph.get_operation_by_name("x")

输出:

<tf.Operation 'x' type=Placeholder>

cube_func_int32.graph.get_tensor_by_name("x:0")  #默认加“:0”

<tf.Tensor 'x:0' shape=(None,) dtype=int32>

cube_func_int32.graph.as_graph_def() #总名字,针对上面两个

node {
 name: "x"
 op: "Placeholder"
 attr {
 key: "_user_specified_name"
 value {
 s: "x"
 }
 }
 attr {
 key: "dtype"
 value {
 type: DT_INT32
 }
 }
 attr {
 key: "shape"
 value {
 shape {
 dim {
  size: -1
 }
 }
 }
 }
}
node {
 name: "Pow/y"
 op: "Const"
 attr {
 key: "dtype"
 value {
 type: DT_INT32
 }
 }
 attr {
 key: "value"
 value {
 tensor {
 dtype: DT_INT32
 tensor_shape {
 }
 int_val: 3
 }
 }
 }
}
node {
 name: "Pow"
 op: "Pow"
 input: "x"
 input: "Pow/y"
 attr {
 key: "T"
 value {
 type: DT_INT32
 }
 }
}
node {
 name: "Identity"
 op: "Identity"
 input: "Pow"
 attr {
 key: "T"
 value {
 type: DT_INT32
 }
 }
}
versions {
 producer: 119
}

 到此这篇关于tensorflow2.0的函数签名与图结构的文章就介绍到这了,更多相关tensorflow函数签名与图结构内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
python实现清屏的方法
Apr 30 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
python模块导入的方法
Oct 24 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
Python assert关键字原理及实例解析
Dec 13 Python
用python拟合等角螺线的实现示例
Dec 27 Python
Python startswith()和endswith() 方法原理解析
Apr 28 #Python
Python如何将函数值赋给变量
Apr 28 #Python
Python多线程thread及模块使用实例
Apr 28 #Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 #Python
Python内置函数locals和globals对比
Apr 28 #Python
使用python实现CGI环境搭建过程解析
Apr 28 #Python
基于python连接oracle导并出数据文件
Apr 28 #Python
You might like
PHP下对字符串的递增运算代码
2010/08/21 PHP
php 判断数组是几维数组
2013/03/20 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
php事件驱动化设计详解
2016/11/10 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
js读取配置文件自写
2014/02/11 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python存储16bit和32bit图像的实例
2018/12/05 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
奶茶店创业计划书范文
2014/01/17 职场文书
秦兵马俑教学反思
2014/02/07 职场文书
Python 中random 库的详细使用
2021/06/03 Python