文章目录
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()方法。