【问题标题】:Error in creating custom activation that reduces the channel size with keras创建使用 keras 减小通道大小的自定义激活时出错
【发布时间】:2018-03-04 06:17:58
【问题描述】:

我使用 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)。但这也给了我同样的错误。激活后我应该怎么做才能将张量的形状传递到下一层?

谢谢

【问题讨论】:

  • 你为什么用Activation。我会尝试Lambda,因为Activation 可能无法改变输出的形状。
  • 抱歉@MarcinMożejko,我删除了我的答案。

标签: tensorflow keras keras-layer keras-2


【解决方案1】:

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

改用Lambda 层。

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 2020-09-13
    • 2021-09-02
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2019-11-28
    • 2018-10-16
    相关资源
    最近更新 更多