Keras 如何训练用于图像匹配的暹罗神经网络?
我需要确认两个指纹(来自身份证和传感器)是否匹配。下面是我数据库中的一些示例(3000对图像):Keras 如何训练用于图像匹配的暹罗神经网络?,keras,Keras,我需要确认两个指纹(来自身份证和传感器)是否匹配。下面是我数据库中的一些示例(3000对图像): 匹配图像的示例 不匹配图像的示例 我正在尝试训练一个暹罗网络,该网络接收一对图像,如果它们不匹配,其输出为[1,0],如果它们匹配,其输出为[0,1],然后我用Keras创建了我的模型: image_left = Input(shape=(200, 200, 1)) image_right = Input(shape=(200, 200, 1)) vector_left = conv_base
image_left = Input(shape=(200, 200, 1))
image_right = Input(shape=(200, 200, 1))
vector_left = conv_base(image_left)
vector_right = conv_base(image_right)
merged_features = concatenate([vector_left, vector_right], axis=-1)
fc1 = Dense(64, activation='relu')(merged_features)
fc1 = Dropout(0.2)(fc1)
# # fc2 = Dense(128, activation='relu')(fc1)
pred = Dense(2, activation='softmax')(fc1)
model = Model(inputs=[image_left, image_right], outputs=pred)
其中conv_base
是一种卷积架构。事实上,我已经尝试了ResNet
、leNet
、MobileNetV2
和NASNet
来自keras.applications
,但它们不起作用
conv_base = NASNetMobile(weights = None,
include_top=True,
classes=256)
我的模型摘要如下所示(取决于使用的相应网络):
除了卷积结构的变化,我还尝试使用预先训练的权重,将所有层设置为可训练层,将最后一个卷积层设置为可训练层,数据增强,使用分类交叉熵
和对比损失
函数,改变学习率,但它们都有相同的行为。事实上,培训和验证精度始终为0.5
有人知道我错过了什么/做错了什么吗
谢谢。您可以参考Shubham Panchal的“使用暹罗网络和TensorFlow从头开始的人脸识别”,您没有找到向量之间的abs距离
| vector|u left-vector|u right
,然后将其传递到最后一个密集层。您可以参考此->Shubham Panchal的“使用暹罗网络和TensorFlow从头开始的人脸识别”您没有找到向量之间的abs距离|向量左-向量右|
,然后将其传递到最后一个密集层。
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_2 (InputLayer) (None, 200, 200, 1) 0
__________________________________________________________________________________________________
input_3 (InputLayer) (None, 200, 200, 1) 0
__________________________________________________________________________________________________
NASNet (Model) (None, 256) 4539732 input_2[0][0]
input_3[0][0]
__________________________________________________________________________________________________
concatenate_5 (Concatenate) (None, 512) 0 NASNet[1][0]
NASNet[2][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 64) 32832 concatenate_5[0][0]
__________________________________________________________________________________________________
dropout_1 (Dropout) (None, 64) 0 dense_1[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 2) 130 dropout_1[0][0]
==================================================================================================
Total params: 4,572,694
Trainable params: 4,535,956
Non-trainable params: 36,738