首页 文章

创建使用keras减少通道大小的自定义激活时出错

提问于
浏览 1457 次
3

我用keras创建了一个自定义激活函数,它将通道大小减少了一半(最大特征映射激活) .

以下是代码的部分内容:

import tensorflow as tf
import keras
from keras.utils.generic_utils import get_custom_objects
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D, Activation

def MyMFM (x):
    Leng = int(x.shape[-1])
    ind1=int(Leng/2)   
    X1=x[:,:,:,0:ind1]
    X2=x[:,:,:,ind1:Leng]
    MfmOut=tf.maximum(X1,X2)
    return MfmOut

get_custom_objects().update({'MyMFM ': Activation(MyMFM)})

model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5),strides=(1, 1), padding = 'same',input_shape = (513,211,1)))
model.add(Activation(MyMFM))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(48, kernel_size=(1, 1),strides=(1,  1 ), padding = 'same'))

当我编译此代码时,我收到以下错误:

number of input channels does not match corresponding dimension of filter, 16 != 32

此错误来自最后一行代码 . 激活后,通道长度从32减少到16.但是下一层自动将通道长度视为32(第一层中的滤波器数不是16) . 我尝试在第二个卷积层中添加input_shape参数来定义输入形如(513,211,16) . 但那也给了我同样的错误 . 激活后,我应该怎么做才能将张量的形状传递给下一层?

谢谢

1 回答

  • 1

    所以 - 基于this文档,您可能会看到 keras 引擎自动将图层的输出形状设置为与其输入形状相同 .

    请改用Lambda图层 .

相关问题