具有cRelu激活的Keras序列模型

具有cRelu激活的Keras序列模型,keras,sequential,Keras,Sequential,我有一个问题,创建一个3层的密集模型,其中激活函数是cRelu。 cRelu连接两个relu(负数和正数),并在其输出中创建一个两倍大小的张量。 当尝试在它之后添加另一层时,我总是会遇到大小不匹配错误 model = Sequential() model.add(Dense(N, input_dim=K, activation=crelu)) model.add(Dense(N//2, activation=crelu)) 我如何告诉下一层期望2N输入和N?Keras不期望激活功能改变输出形

我有一个问题,创建一个3层的密集模型,其中激活函数是cRelu。 cRelu连接两个relu(负数和正数),并在其输出中创建一个两倍大小的张量。 当尝试在它之后添加另一层时,我总是会遇到大小不匹配错误

model  = Sequential()
model.add(Dense(N, input_dim=K, activation=crelu))
model.add(Dense(N//2, activation=crelu))

我如何告诉下一层期望2N输入和N?

Keras不期望激活功能改变输出形状。如果要更改,应将crelu功能包装在图层中,并指定相应的输出形状:

将tensorflow导入为tf
从keras.layers导入图层
类别cRelu(层):
定义初始(自我,**kwargs):
超级(cRelu,self)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(**kwargs)
def构建(自我,输入_形状):
超级(cRelu,self).构建(输入形状)
def呼叫(自我,x):
返回tf.nn.crelu(x)
def计算输出形状(自身、输入形状):
"""
输出_形状的所有轴,除了最后一个,
与输入形状一致。
最后一个是相应输入的两倍大小
因为这是两个relu连接的轴。
"""
返回(*input_shape[:-1],input_shape[-1]*2)
然后您可以按如下方式使用它

model=Sequential()
模型添加(密集(N,输入尺寸=K))
model.add(cRelu())
模型.添加(密集(N//2))
model.add(cRelu())

您得到的确切错误是什么?ValueError:维度必须相等,但对于输入形状为:[?、500]、[250,83]的“密集型2/MatMul”(op:“MatMul”)而言,维度为500和250。您的crelu是如何实现的?我认为这就是问题所在,它应该是一个层,所以形状推断工作。谢谢!你能解释一下compute\u output\u shape方法中返回的形状吗?看起来很奇怪是的!返回的元组中第一个元素前面的星号是什么?是打字错误吗?根本不是。这是Python拆包操作符:@ Amirfel,如果你认为这个答案是正确的,我建议你考虑批准它,所以任何面临类似问题的人都可以很容易地看到这个问题可以用这个答案来解决。如果您认为问题没有解决,请给出相应的反馈