定义自定义tf.keras图层时是否仍需要实现`compute_output_shape()`?

时间:2020-04-30 11:10:29

标签: tensorflow keras tensorflow2.0 keras-layer tf.keras

我已使用TensorFlow 2.1.0在Layer中实现了自定义tf.keras

过去,使用独立的Keras时,在任何自定义层中定义compute_output_shape(input_shape)方法很重要,这样才能创建计算图。

现在,移至TF2后,我发现即使从自定义实现中删除该方法,该层仍然可以按预期工作。显然,它既适用于渴望模式又适用于图形模式。 这是我的意思的示例:

from tensorflow.keras.layers import Layer, Input
from tensorflow.keras.models import Sequential
import numpy as np


class MyLayer(Layer):
    def call(self, inputs):
        return inputs[:, :-1]  # Do something that changes the shape


m = Sequential([MyLayer(), MyLayer()])
m.predict(np.ones((10, 3)))  # This would not have worked in the past

可以肯定地说compute_output_shape()不再需要了吗?我缺少重要的东西吗?

在文档中没有明确提到删除compute_output_shape(),尽管没有一个示例明确实现它。

谢谢

1 个答案:

答案 0 :(得分:4)

Tensorflow文档中未提及,但使用Scikit-进行机器学习的动手-的第12章自定义模型和TensorFlow培训由Aurelien Geron撰写的O'RIELLY Publications的Learn and Tensorflow(针对Tensorflow 2的第二版更新),如下面的屏幕快照所示,它被提及:

enter image description here

要回答您的问题,是的,可以肯定地说除非层是动态的,否则不需要compute_output_shape

从此Tensorflow Tutorial on Custom Layer可以看出这一点,其中未使用compute_output_shape

希望这会有所帮助。学习愉快!