定义自定义 tf.keras 层时是否仍然需要实现 `compute_output_shape()`?
Is it still necessary to implement `compute_output_shape()` when defining a custom tf.keras Layer?
我使用 TensorFlow 2.1.0 在 tf.keras
中实现了自定义 Layer
。
以前使用单机Keras时,重要的是在任意自定义层中定义compute_output_shape(input_shape)
方法,这样才能创建计算图。
现在,转移到 TF2 后,我发现即使我从我的自定义实现中删除该方法,该层仍按预期工作。显然,它在 eager 和 graph 模式下都可以工作。
这是我的意思的一个例子:
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()
,尽管 none 示例明确实现了它。
谢谢
Tensorflow 文档中未提及,但在本书的第 12 章、Custom Models and Training with TensorFlow 中,O'REILLY Publications 的 Hands-on Machine Learning using Scikit-Learn and Tensorflow (2nd Edition Updated for Tensorflow 2),由 Aurelien Geron 撰写,如下面的截图所示:
回答你的问题,是的,可以肯定地说 compute_output_shape
是不需要的,除非图层是动态的。
从 Tensorflow Tutorial on Custom Layer 可以明显看出 compute_output_shape
没有被使用。
希望这对您有所帮助。快乐学习!
我使用 TensorFlow 2.1.0 在 tf.keras
中实现了自定义 Layer
。
以前使用单机Keras时,重要的是在任意自定义层中定义compute_output_shape(input_shape)
方法,这样才能创建计算图。
现在,转移到 TF2 后,我发现即使我从我的自定义实现中删除该方法,该层仍按预期工作。显然,它在 eager 和 graph 模式下都可以工作。 这是我的意思的一个例子:
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()
,尽管 none 示例明确实现了它。
谢谢
Tensorflow 文档中未提及,但在本书的第 12 章、Custom Models and Training with TensorFlow 中,O'REILLY Publications 的 Hands-on Machine Learning using Scikit-Learn and Tensorflow (2nd Edition Updated for Tensorflow 2),由 Aurelien Geron 撰写,如下面的截图所示:
回答你的问题,是的,可以肯定地说 compute_output_shape
是不需要的,除非图层是动态的。
从 Tensorflow Tutorial on Custom Layer 可以明显看出 compute_output_shape
没有被使用。
希望这对您有所帮助。快乐学习!