我已使用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()
,尽管没有一个示例明确实现它。
谢谢
答案 0 :(得分:4)
Tensorflow文档中未提及,但使用Scikit-进行机器学习的动手-的第12章,自定义模型和TensorFlow培训由Aurelien Geron撰写的O'RIELLY Publications的Learn and Tensorflow(针对Tensorflow 2的第二版更新),如下面的屏幕快照所示,它被提及:
要回答您的问题,是的,可以肯定地说除非层是动态的,否则不需要compute_output_shape
。
从此Tensorflow Tutorial on Custom Layer可以看出这一点,其中未使用compute_output_shape
。
希望这会有所帮助。学习愉快!