gpt4 book ai didi

python - Siamese 网络的 Keras 模型不学习并且总是预测相同的输出

转载 作者:行者123 更新时间:2023-12-04 04:20:38 26 4
gpt4 key购买 nike

我正在尝试使用 Keras 训练 Siamese 神经网络,目标是识别 2 张图像是否属于同一类。我的数据被打乱并且有相同数量的正面例子和负面例子。我的模型没有学习任何东西,它总是预测相同的输出。我每次都得到相同的损失、验证准确性和验证损失。

Training Output

def convert(row):
return imread(row)

def contrastive_loss(y_true, y_pred):
margin = 1
square_pred = K.square(y_pred)
margin_square = K.square(K.maximum(margin - y_pred, 0))
return K.mean(y_true * square_pred + (1 - y_true) * margin_square)

def SiameseNetwork(input_shape):
top_input = Input(input_shape)

bottom_input = Input(input_shape)

# Network
model = Sequential()
model.add(Conv2D(96,(7,7),activation='relu',input_shape=input_shape))
model.add(MaxPooling2D())
model.add(Conv2D(256,(5,5),activation='relu',input_shape=input_shape))
model.add(MaxPooling2D())
model.add(Conv2D(256,(5,5),activation='relu',input_shape=input_shape))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(4096,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1024,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(512,activation='relu'))
model.add(Dropout(0.5))

encoded_top = model(top_input)
encoded_bottom = model(bottom_input)

L1_layer = Lambda(lambda tensors:K.abs(tensors[0] - tensors[1]))
L1_distance = L1_layer([encoded_top, encoded_bottom])

prediction = Dense(1,activation='sigmoid')(L1_distance)
siamesenet = Model(inputs=[top_input,bottom_input],outputs=prediction)
return siamesenet

data = pd.read_csv('shuffleddata.csv')
print('Converting X1....')

X1 = [convert(x) for x in data['X1']]

print('Converting X2....')

X2 = [convert(x) for x in data['X2']]

print('Converting Y.....')
Y = [0 if data['Y'][i] == 'Negative' else 1 for i in range(len(data['Y']))]

input_shape = (53,121,3,)
model = SiameseNetwork(input_shape)
model.compile(loss=contrastive_loss,optimizer='sgd',metrics=['accuracy'])
print(model.summary())
model.fit(X1,Y,batch_size=32,epochs=20,shuffle=True,validation_split = 0.2)
model.save('Siamese.h5')

最佳答案

为了社区的利益,在此部分中提及此问题的解决方案(即使它出现在评论部分)。

由于该模型与其他标准数据集一起工作良好,解决方案是使用更多数据。模型没有学习,因为它用于训练的数据较少。

关于python - Siamese 网络的 Keras 模型不学习并且总是预测相同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59442922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com