为什么 keras 自定义层在总结中产生无意义的输出形状



我在keras中定义了一个自定义层:

import keras.backend as K
from keras.layers import Input
from keras.models import Model
import keras
class MyLayer(keras.layers.Layer):
def __init__(self):
super(MyLayer, self).__init__()
def call(self, emb):
emb = K.repeat_elements(emb, 6, 2)
return emb
inputs = Input(shape=(2,1))
outputs = MyLayer()(inputs)
print(outputs.shape)
model = Model(inputs=inputs, outputs=outputs)
model.summary()

(?, 2, 6)
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_16 (InputLayer)        (None, 2, 1)              0         
_________________________________________________________________
my_layer_8 (MyLayer)         (None, 2, 1)              0         
=================================================================
Total params: 0
Trainable params: 0
Non-trainable params: 0

model.output.shape 是 (None, 2, 6(,正如预期的那样,但在摘要中它说我的图层的输出形状是 (None, 2, 1(。为什么?

覆盖图层中的compute_output_shape方法:

class MyLayer(keras.layers.Layer):
def __init__(self):
super(MyLayer, self).__init__()
def call(self, emb):
emb = K.repeat_elements(emb, 6, 2)
return emb
def compute_output_shape(self, input_shape):
return (None, input_shape[1], 6)

最新更新