相同的神经网络只定义一个可以吗

来源:10-22 EncoderLayer实现

慕码人537708

2020-03-04

老师你好,一直有个疑惑,如果一个Layer中用到的相同的基础神经网络例如这里的Dropout层(参数也一样),那么一定要定义两个吗,可以在init函数中只定义一个,然后在call函数中重复调用吗。这样编译会不会出现问题
就如之前的

self.layer_normalization1=tf.keras.layers.LayerNormalization(epsilon=1e-6)
self.layer_normalization2=tf.keras.layers.LayerNormalization(epsilon=1e-6)
self.dropout1=tf.keras.layers.Dropout(rate)
self.dropout2=tf.keras.layers.Dropout(rate)

如果两个只写一个,然后在call函数里重复调用可以吗。会不会出问题

写回答

1回答

正十七

2020-03-05

不可以,因为不同层次上使用的层次它们的参数和状态是不一样的。

即便是dropout,虽然没有参数,但是它有输入的大小,不同层次间的输入大小可能是不同的。而且它也是有状态的,即随机设哪些输入为0的状态,如果重复调用的话,那么每一层设0的方法就是一样的,这样的模式可能会影响最后的结果。

而对于其他的层次,比如layer normalization层,里面的参数就不能是一样的。

所以不能重用。

2
0

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

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

1849 学习 · 896 问题

查看课程