TensorFlow2.0入门到进阶2.13 —— 子类API实现wide&deep模型

1、wide&deep原理

wide&deep模型:https://blog.csdn.net/caoyuan666/article/details/105869670

2、代码

官方手册:https://tensorflow.google.cn/api_docs/python/tf/keras/Model

  • keras.models.Model
    通过子类化模型类:在这种情况下,你应该在_init__中定义你的层,在call中实现模型的前向传递
class WideDeepModel(keras.models.Model):
    def __init__(self):
        super(WideDeepModel,self).__init__()
        """定义模型的层次"""
        self.hidden1_layer=keras.layers.Dense(30,activation='relu')
        self.hidden2_layer=keras.layers.Dense(30,activation='relu')
        self.output_layer=keras.layers.Dense(1)
    
    def call(self,input):
        """完成模型的正向计算"""
        hidden1=self.hidden1_layer(input)
        hidden2=self.hidden2_layer(hidden1)
        concat=keras.layers.concatenate([input,hidden2])
        output=self.output_layer(concat)
        return output

#创建一个对象,确定输入维度,输入中None为样本数目,8为特征数目
model=WideDeepModel()
model.build(input_shape=(None,8))

'''
#或采用这种方式构建模型
model=keras.model.Sequential([
    WideDeepModel()
])
model.build(input_shape=(None,8))
'''

model.summary()
model.compile(loss='mean_squared_error',
              optimizer='adam',)

  • 关于bulid
    tf.keras.Model.build(self, input_shape)
    根据收到的输入形状构建模型。

  • build 与 call
    Layers中两个重要的方法build和call方法,build中存放本层需要初始化的变量,call中存放本层的计算逻辑,这两个方法都需要子类进行重写。基类中重写了__call__方法,当调用__call__时,类会首先检查build变量是否为false,若为false则先执行build()方法初始化变量,并将build变量设为True,这样在第二次调用__call__时将不再有变量被初始化。创建完变量后,__call__继续执行call()方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力改掉拖延症的小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值