And*_*Ito 9 conv-neural-network keras
因此,我正在尝试实施这篇关于Siamese神经网络的论文:Sumit Chopra,Raia Hadsell和Yann LeCun(2005),通过应用于面部验证来区分相似性度量.不过,我正在使用CIFAR10数据集,有10个类.
为方便起见,再现了一条腿的规格.符号:C_x是卷积层,S_x是子采样层,F_x是完全连接的层; 使用共享索引x:
我试过的
model = Sequential()
#C1
model.add(Convolution2D(15, 7, 7,
activation='relu',
border_mode='same',
input_shape=input_img_shape))
print("C1 shape: ", model.output_shape)
#S2
model.add(MaxPooling2D((2,2), border_mode='same'))
print("S2 shape: ", model.output_shape)
#...
#C5
model.add(Convolution2D(250, 5, 5,
activation='relu',
border_mode='same'))
print("C5 shape: ", model.output_shape)
#F6
model.add(Dense(50))
Run Code Online (Sandbox Code Playgroud)
这会抛出一条长错误信息,我认为这是一个重塑错误.错误的片段:
Exception: Input 0 is incompatible with layer dense_13: expected
ndim=2, found ndim=4
Run Code Online (Sandbox Code Playgroud)
我知道问题是在最后的Dense层中被隔离的,因为如果我将它注释掉,代码会顺利进行.但我不确定我应该如何塑造/指定我的最终完全连接层,以便它与先前的卷积层兼容?
我看过的一些地方
这是一个相关的问题,虽然实现略有不同(似乎在撰写本文时keras中没有'Siamese'核心层).我知道Theano中也有实现,如果我不能在keras中执行它,我会牢记这一点.
谢谢!
正如 Matias Valdenegro 提到的,Keras 已经有了Siamese 网络的示例。不过,该示例仅使用密集层。
你的问题是你需要Flatten在卷积层和密集层之间添加一个层以获得正确的形状,请参阅此 Keras CNN 示例
这两个例子应该可以帮助你建立你的连体网络。