Я использую tenorflow 2.1 и получаю эту ошибку
OP_REQUIRES failed at conv_ops.cc:530 : Invalid argument: input depth must be evenly divisible by filter depth: 56 vs 16
Когда я запускаю этот код
# modified from https://github.com/tensorflow/tpu/blob/master/models/official/efficientnet/efficientnet_model.py
def SEBlock(input_filters, se_ratio, data_format=None):
expand_ratio = 1
num_reduced_filters = max(
1, int(input_filters * se_ratio))
filters = input_filters * expand_ratio
channel_axis = -1
spatial_dims = [1, 2]
def block(inputs):
x = inputs
x = layers.Lambda(lambda a: K.mean(a, axis=spatial_dims, keepdims=True))(x)
x = layers.Conv2D(
num_reduced_filters,
kernel_size=[1, 1],
strides=[1, 1],
padding='same',
use_bias=True,
data_format="channels_last")(x)
x = Swish()(x)
# Excite
x = layers.Conv2D(
filters,
kernel_size=[1, 1],
strides=[1, 1],
padding='same',
use_bias=True,
data_format="channels_last")(x)
x = layers.Activation('sigmoid')(x)
out = layers.Multiply()([x, inputs])
return out
return block
Когда я строю свою модель с этим блоком, она строится просто отлично, но когда я пытаюсь тренироваться, он взрывается. Входной тензор в блок имеет значение shape=(None, 56, 56, 16)
, на выходе возвращается тензор с такими же размерами.
input_filters = 16
se_ratio = .25