全面小白分析如何使用tensorflow2.0中的函数式API创建任意结构模型

本文详细解析了如何使用TensorFlow2.0的函数式API来创建灵活的神经网络模型,与Sequential方法相比,函数式API提供了更多的自由度,允许开发者访问和利用中间层的数据。
部署运行你感兴趣的模型镜像

使用tensorflow2.0中的函数式API创建任意结构模型这种方法比上一种使用Sequential按层顺序搭建神经网络更加灵活,但最终如果我们想要搭建例如resnet这种网络,这些方法都是蕴含在里面的,无所谓谁跟谁。上一篇博客地址:全面小白分析如何使用tensorflow2.0中的Sequential按层顺序创建模型

当看到神经网络结构图的时候,我们思考最多的事情是什么?一下子看到那么复杂的结构图,自己是不是谎了?

别谎,你首先应该思考,这个网络的输入和输出分别是什么?这个网络不管多复杂,还不是一层一层搭建起来的。所以我们首先思考,输入层怎么搭建?输入层之后的第二层又该如何跟第一层结合,然后又该跟第三层如何结合?

对于使用Sequential对象这种方法而言,我们不是很明确中间出现哪些数据,也使用不到中间的数据。例如下面的代码,你如何使用带第二层的数据,是不是看起来一点头脑都没有。它只给你明确了最终输入和最终输出而已。这就是为啥我们诞生了今天要重点讲的第二种方法。

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D  # 卷积层
from tensorflow.keras.layers import MaxPool2D  # 最大池化
from tensorflow.keras.layers import Flatten  # 平铺层
from tensorflow.keras.layers import Dense  # 全连接层

# todo 我们如何把这些材料搭建起来?使用列表方式,总共一步,步骤一

# 步骤一,实例化一个Sequential对象,并传入一个列表

my_name_is_learn_model = Sequential(
    [
        Dense(units=32, name='dense_1'),
        Dense(units=64, name='dense_2'),
        Dense(units=128, name='dense_3'),
        Dense(units=10, name='dense_4')
    ]
)

# 步骤二,使用这个神经网络
import tensorflow as tf

x = tf.Variable(initial_value=tf.random.normal(shape=(32, 784)))  # 随便构造一个数据
out = my_name_is_learn_model(x)  # 将数据输入神经网络得到输出
pass

使用函数式API创建任意结构的模型我们还是需要层对象,例如下面这些:

from tensorflow.keras.layers import Conv2D  # 卷积层
from tensorflow.keras.layers import MaxPool2D  # 最大池化
from tensorflow.keras.layers import Flatten  # 平铺层
from tensorflow.keras.layers import Dense  # 全连接层

更多层对象的解释和详情我在另外一篇博客上有详细介绍:都2020年了,汇总tf.keras模型层layers都有哪些

有了层对象之后就相当于建房子有了瓷砖,接下来演示如何搭建,注意看代码注释,注意看代码注释,注意看代码注释

from tensorflow.keras.layers import Conv2D  # 卷积层
from tensorflow.keras.layers import MaxPool2D  # 最大池化
from tensorflow.keras.layers import Flatten  # 平铺层
from tensorflow.keras.layers import Dense  # 全连接层

# todo 使用函数式api,我们如何把这些材料搭建起来?

# 步骤一,定义输入层
from tensorflow.keras.layers import Input
input_img = Input(shape=(32, 784))

# 步骤二,定义第一个层, 格式如下:输出 = 层对象( )(输入)
dense1 = Dense(units=32, name='dense_1')(input_img)

# 步骤三,按照步骤二的样子定义自己想要的层级和结构
dense2 = Dense(units=64, name='dense2')(dense1)  # 输入是dense1
dense3 = Dense(units=128, name='dense3')(dense2)  # 输入是dense2
dense4 = Dense(units=10, name='dense4')(dense3)  # 输入是dense3

# 步骤四,定义自己输出的变量
from tensorflow.keras import models
# model = models.Model(inputs=input_img, outputs=dense2)  # 输入是input_img, 输出是中间层结果dense2
# model = models.Model(inputs=input_img, outputs=dense3)  # 输入是input_img, 输出是中间层结果dense3
my_name_is_learn_model = models.Model(inputs=input_img, outputs=dense4)  # 输入是input_img, 输出是中间层结果dense4
"""
当然你也可以将中间几个值整合一下再输出也可以,例如维度的堆叠
""" 

# 步骤五,使用这个神经网络
import tensorflow as tf

x = tf.Variable(initial_value=tf.random.normal(shape=(32, 784)))  # 随便构造一个数据
out = my_name_is_learn_model(x)  # 将数据输入神经网络得到输出

# 输入的数据要跟输入层的shape要求一致,输出就是自己指定的输出
pass

如果你耐心地看到这里,恭喜你,又获得了一项新技能,给自己点个赞吧,爱你哟么么哒

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值