可以把build函数定义weight和bias的代码放到__init__函数中吗?
来源:3-6 使子类与lambda分别实战自定义层次
weixin_宝慕林8180759
2021-02-11
在之前课程中用Sequencial封装模型的时候,DenseLayer定义好像没有用到build函数,而是把所有参数(包括input_shape)都传到初始化函数中,那请问我是否可以把定义weight和bias的两段代码放到初始化函数内?
写回答
1回答
-
weixin_宝慕林8180759
提问者
2021-02-11
我自问自答了,其实官网上就有:https://tensorflow.google.cn/api_docs/python/tf/keras/layers/Layer
主要意思是说:__init__() 函数中定义该层中不依赖于input_shape的属性,比如说Dense里面的激活函数就不依赖与input_shape
而build()函数里面这是定义一些依赖于input_shape的属性,比如说weight和bias,build() 函数是由程序自动调用的(在第一次调用这个层的时候)以下是关于build函数自动调用的简单验证:
layer = keras.layers.Dense(10, input_shape=(5,))
# 这里输出空数组
print(layer.variables)
x = layer(tf.zeros([10,5]))
# 在调用该层次之后,才可以正常打印该层的变量
# 证明build是自动调用的
print(layer.variables)00
相似问题