可以把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)

0
0

Google老师亲授 TensorFlow2.0 入门到进阶

Tensorflow2.0实战—以实战促理论的方式学习深度学习

1849 学习 · 896 问题

查看课程