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

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)

输出:

从输出结果可以看到:调用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 #图定义

输出:

[,

,

,

]

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))

输出:

[, ]

[]

cube_func_int32.graph.get_operation_by_name("x")

输出:

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

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函数签名与图结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: tensorflow2.0的函数签名与图结构(推荐)

本文地址: http://www.cppcns.com/jiaoben/python/310793.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值