【发布时间】:2019-07-05 07:57:14
【问题描述】:
我有一个 pandas 数据框,其中包含正面和负面示例的文件名,如下所示
img1 img2 y
001.jpg 002.jpg 1
003.jpg 004.jpg 0
003.jpg 002.jpg 1
我想使用 Keras ImageDataGenerator 和 flow_from_dataframe 训练我的 Siamese 网络。如何设置我的训练,以便代码同时输入 2 个带有 1 个标签的图像。
下面是我的模型的代码
def siamese_model(input_shape) :
left = Input(input_shape)
right = Input(input_shape)
model = Sequential()
model.add(Conv2D(32, (3,3), activation='relu', input_shape=input_shape))
model.add(BatchNormalization())
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(BatchNormalization())
model.add(Conv2D(128, (3,3), activation='relu'))
model.add(BatchNormalization())
model.add(Conv2D(256, (3,3), activation='relu')
model.add(BatchNormalization())
model.add(Conv2D(256, (3,3), activation='relu')
model.add(MaxPooling2D())
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(512, activation='sigmoid'))
left_encoded = model(left)
right_encoded = model(right)
L1_layer = Lambda(lambda tensors:K.abs(tensors[0] - tensors[1]))
L1_distance = L1_layer([left_encoded, right_encoded])
prediction = Dense(1,activation='sigmoid')(L1_distance)
siamese_net = Model(inputs=[left,right],outputs=prediction)
return siamese_net
model = siamese_model((224,224,3))
model.compile(loss="binary_crossentropy",optimizer="adam", metrics=['accuracy'])
datagen_left = ImageDataGenerator(rotation_range=10,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
vertical_flip = True)
datagen_right = ImageDataGenerator(rotation_range=10,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
vertical_flip = True)
【问题讨论】:
-
你能解释一下这段代码“
L1_layer = Lambda(lambda tensors:K.abs(tensors[0] - tensors[1]))”做什么吗? -
@Noran 计算两幅图像编码之间的绝对距离
-
如果我们将距离层添加到模型中,我们如何知道有助于确定两个图像是否相同或不同的阈值?
-
@sougatasaha 正在计算“两幅图像编码之间的绝对距离”技术有名字吗?
-
@Noran,网络将被训练以确定阈值。
标签: machine-learning keras deep-learning computer-vision conv-neural-network