前向传播网络实现(类与函数)——TensorFlow2.4


前言

最近开始着手语义分割方面的内容,由于刚开始入门深度学习,看了一下deeplab的源码,里面所有网络结构基本上都是由类进行定义的(目的是为了方便复用),而大部分博主的复现代码基本上都是基于函数实现,作为小白的我一时有点蒙圈。为了更好地理解前向传播吧以及类与函数定义的网络结构,本文分别用类核函数实现了简单的前向传播函数


提示:以下是本篇文章正文内容,下面案例可供参考

一、基于类的前向传播

python是面向对象的语言,然后巴拉巴拉。。。
用类定义网络,可以理解为定义了一个网络变量,不同的变量进行组合就构成了各式各样的复杂 网络结构
由类定义的前向传播网络代码示例如下(示例):

import  tensorflow as tf
from    tensorflow import keras
from    tensorflow.keras import layers, Sequential
class Network(keras.Model):
    def __init__(self):
        super(Network, self).__init__()
        # 创建三个前向传播网络
        self.fc1 = layers.Dense(64,activation="relu")
        self.fc2 = layers.Dense(64,activation="relu")
        self.fc3 = layers.Dense(1)
    def call(self, inputs, training = None, mask = None):
        x = self.fc1(inputs)
        x = self.fc2(x)
        x = self.fc3(x)
        return x
model = Network()
model.build(input_shape=(4,9))
model.summary()

二、基于函数的前向传播

函数大家都经常用,输入-功能-输出

由函数实现的前向传播网络代码如下(示例):

import  tensorflow as tf
from    tensorflow.keras import layers
from tensorflow.keras import  Model

def Network(input_shape=(256,256,3)):
    inputs = layers.Input(input_shape)
    fc1 = layers.Dense(64,activation="relu")(inputs)
    fc2 = layers.Dense(64,activation="relu")(fc1)
    fc3 = layers.Dense(1)(fc2)

    return Model(inputs =inputs,outputs = fc3)
model = Network()
model.summary()

总结

我们可以发现类定义的网络结构,首先继承了keras.Model类(将网络层封装成一个用于训练和推理的模型),然后对Network类进行初始化,包括定义每一层的网络类型,以及网络传播形式(call),定义传播形式的需要定义输入input。将模型实例化时,需要先进行根据输入的shape构建模型,然后才能打印模型:
model = Network()
model.build(input_shape=(4,9))
model.summary()

由函数定义的前向传播网络就比较简单啦,首先定义函数名,输入,然后按照网络结构传播变量,这里面卷积函数处理的变量必须为tensor类型即:

inputs = layers.Input(input_shape)

最后需要将网络模型封装成一个可以用于训练和推理网络模型
在实现过程中比较容易出问题的地方就是模型的实例化,这里还不是太明白。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云朵不吃雨

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值