tf系列4——模型构建4种方法

本文详细介绍了四种深度学习模型构建方法:预训练模型使用、Sequential模式、Functional API以及自定义Class。重点讲解了Unet模型的函数式和类实现,并提供了相关代码示例。此外,还提到了深度学习模型的可视化和常用层的总结。

这篇文章有一定借鉴意义

https://panjinquan.blog.youkuaiyun.com/article/details/86712328

一共就这4种,足够,别瞎想

1 使用现有的预训练模型

keras.applications.vgg16.VGG16(include_top=True, weights='imagenet',
                                input_tensor=None, input_shape=None,
                                pooling=None,
                                classes=1000)

model = tf.keras.applications.MobileNetV2(weights=None, classes=5)

https://mattzheng.blog.youkuaiyun.com/article/details/72859145

这个案例很好https://xercis.blog.youkuaiyun.com/article/details/88660053?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=1330144.35460.16182210027491941&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

2 Keras Sequential模式建立模型(不推荐用,跳接结构不行)

2.1 Sequential内置

在这里插入图片描述
在这里插入图片描述
参考:https://www.bilibili.com/video/BV1B7411L7Qt?p=33

在这里插入图片描述

2.2 Sequential外置

def mnist_cnn(input_shape):
    '''
    构建一个CNN网络模型
    :param input_shape: 指定输入维度
    :return:
    '''
    model=keras.Sequential()
    model.add(keras.layers.Conv2D(filters=32,kernel_size = 5,strides = (1,1),
                                  padding = 'same',activation = tf.nn.relu,input_shape = input_shape))
    model.add(keras.layers.MaxPool2D(pool_size=(2,2), strides = (2,2), padding = 'valid'))
    model.add(keras.layers.Conv2D(filters=64,kernel_size = 3,strides = (1,1),padding = 'same',activation = tf.nn.relu))
    model.add(keras.layers.MaxPool2D(pool_size=(2,2), strides = (2,2), padding = 'valid'))
    model.add(keras.layers.Dropout(0.25))
    model.add(keras.layers.Flatten())
    model.add(keras.layers.Dense(units=128,activation = tf.nn.relu))
    model.add(keras.layers.Dropout(0.5))
    model.add(keras.layers.Dense(units=10,activation = tf.nn.softmax))
    return model

3 Functional API 函数api建立模型(最常用,复杂网络)

多输入模型,
多输出模型,
具有共享层的模型(同一层被调用多次),
具有非序列数据流的模型(例如,剩余连接)

这种方式就是各个层都是一个函数,通过函数的叠加就可以实现,一般使用这种方法,将模型封装成一个模型函数。

inputs = tf.keras.Input(shape=(28, 28, 1))
x = tf.keras.layers.Flatten()(inputs)
x = tf.keras.layers.Dense(units=100, activation=tf.nn.relu)(x)
x = tf.keras.layers.Dense(units=10)(x)
outputs = tf.keras.layers.Softmax()(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

看下面这个FCN构建,结合了迁移学习和函数api建立模型
https://blog.youkuaiyun.com/xiaotiig/article/details/110355547

下面这个resnet网络结构的实现,也是用的这种方法实现的,因为有很多的残差结构
https://blog.youkuaiyun.com/xiaotiig/article/details/117673634

4 tf构建模型Class

4.1 初识

在这里插入图片描述
实例化层然后调用方法,两步
init里实例化各种方法
call调用各种方法

在这里插入图片描述
继承 tf.keras.Model 后,我们同时可以使用父类的若干方法和属性,例如在实例化类 model = Model() 后,可以通过 model.variables 这一属性直接获得模型中的所有变量,免去我们一个个显式指定变量的麻烦。

对于上面的 y_pred = w * X + b ,我们可以通过模型类的方式编写如下:这里,我们没有显式地声明a 和 b 两个变量并写出 y_pred = w x X + b 这一线性变换,而是建立了一个继承了 tf.keras.Model 的模型类 Linear 。这个类在初始化部分实例化了一个 全连接层 ( tf.keras.layers.Dense ),并在 call 方法中对这个层进行调用,实现了线性变换的计算。

import tensorflow as tf

X = tf.constant([[1.0, 2.0, 3.0], 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳花bigdata

如果文章给您带来帮助,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值