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

文章目录

  • 1、wide&deep原理
  • 2、代码

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()方法。

你可能感兴趣的:(TensorFlow2.0入门到进阶2.13 —— 子类API实现wide&deep模型)