繁体   English   中英

连体网络中的 val_loss 和 val_accuracy 不变

[英]val_loss and val_accuracy do not change in siamese network

我实现了连体网络,但 val_loss 和 val_accuracy 没有改变。 数据集用于人脸。 我为标签和图像制作了配对,并且我可以在测试中看到配对,所以我在阅读配对时没有问题。 连体网络代码:

inputs = layers.Input(input Shape)

x = layers.Conv2D(64,(3,3),padding = 'same')(inputs)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)

x =layers.Conv2D(64,(3,3),padding = 'same')(x)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)
x =layers.MaxPool2D(pool_size = (2,2),strides=(2,2))(x)

x =layers.Conv2D(128,(3,3),padding = 'same')(x)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)

x =layers.Conv2D(128,(3,3),padding = 'same')(x)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)
x =layers.MaxPool2D(pool_size = (2,2),strides=(2,2))(x)

x =layers.Conv2D(256,(3,3),padding = 'same')(x)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)

x =layers.Conv2D(256,(3,3),padding = 'same')(x)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)

x =layers.Conv2D(256,(3,3),padding = 'same')(x)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)
x =layers.MaxPool2D(pool_size = (2,2),strides=(2,2))(x)

x =layers.Conv2D(256,(3,3),padding = 'same')(x)
x =layers.BatchNormalization()(x)
x =layers.Activation('relu')(x)
x =layers.Dropout(0.8)(x)
x =layers.MaxPool2D(pool_size = (2,2),strides=(2,2))(x)

x =layers.Dense(4096, activation ='relu')(x)
x =layers.Dropout(0.5)(x)
x =layers.Dense(4096, activation ='relu')(x)
x =layers.Dropout(0.5)(x)

pooledOutput = layers.GlobalAveragePooling2D()(x)
outputs = layers.Dense(embeddingDim)(pooledOutput)
# Build the model
model = Model(inputs, outputs)
# Return the model to the calling function

print (model.summary())
return model  

然后我使用 adam 和 binary_crossentropy 编译部分:

opt = Adam(lr = 1e-1)
model.compile(loss="binary_crossentropy", optimizer=opt,
          metrics=["accuracy"])

history = model.fit([pairTrain[:, 0], pairTrain[:, 1]],labelTrain,
 validation_data=([pairTest[:, 0],  pairTest[:, 1]],  labelTest),batch_size=Config.BATCH_SIZE,epochs=Config.EPOCHS)

以及model汇总及参数个数:

 Layer (type)                Output Shape              Param #   
 =================================================================
 input_3 (InputLayer)        [(None, 96, 96, 3)]       0         
                                                             
 conv2d (Conv2D)             (None, 96, 96, 64)        1792      
                                                             
 batch_normalization (BatchNormalization)  (None, 96, 96, 64)       256       
                                                    
                                                             
 activation (Activation)     (None, 96, 96, 64)        0         
                                                             
 dropout (Dropout)           (None, 96, 96, 64)        0         
                                                             
 conv2d_1 (Conv2D)           (None, 96, 96, 64)        36928     
                                                             
 batch_normalization_1(BatchNormalization) (None, 96, 96, 64)       256       
                                                 
                                                             
 activation_1 (Activation)   (None, 96, 96, 64)        0         
                                                             
 dropout_1 (Dropout)         (None, 96, 96, 64)        0         
                                                             
 max_pooling2d (MaxPooling2D  (None, 48, 48, 64)       0                                                                        
                                                             
 conv2d_2 (Conv2D)           (None, 48, 48, 128)       73856     
                                                             
 batch_normalization_2 (BatchNormalization)  (None, 48, 48, 128)      512       
                                                 
                                                             
 activation_2 (Activation)   (None, 48, 48, 128)       0         
                                                             
 dropout_2 (Dropout)         (None, 48, 48, 128)       0         
                                                             
 conv2d_3 (Conv2D)           (None, 48, 48, 128)       147584    
                                                             
 batch_normalization_3 (BatchNormalization)  (None, 48, 48, 128)      512       
                                             
                                                             
 activation_3 (Activation)   (None, 48, 48, 128)       0         
                                                             
 dropout_3 (Dropout)         (None, 48, 48, 128)       0         
                                                             
 max_pooling2d_1 (MaxPooling2D)  (None, 24, 24, 128)      0         
                                                    
 conv2d_4 (Conv2D)           (None, 24, 24, 256)       295168    
                                                             
 batch_normalization_4 (BatchNormalization) (None, 24, 24, 256)      1024      
                                                                                                             
 activation_4 (Activation)   (None, 24, 24, 256)       0         
                                                             
 dropout_4 (Dropout)         (None, 24, 24, 256)       0         
                                                             
 conv2d_5 (Conv2D)           (None, 24, 24, 256)       590080    
                                                             
 batch_normalization_5 (BatchNormalization) (None, 24, 24, 256)      1024                                            
                                                             
 activation_5 (Activation)   (None, 24, 24, 256)       0         
                                                             
 dropout_5 (Dropout)         (None, 24, 24, 256)       0         
                                                             
 conv2d_6 (Conv2D)           (None, 24, 24, 256)       590080    
                                                             
 batch_normalization_6 (BatchNormalization) (None, 24, 24, 256)      1024      
                                                                                                           
 activation_6 (Activation)   (None, 24, 24, 256)       0         
                                                             
 dropout_6 (Dropout)         (None, 24, 24, 256)       0         
                                                             
 max_pooling2d_2 (MaxPooling2D)  (None, 12, 12, 256)      0         
                                                        
                                                             
 conv2d_7 (Conv2D)           (None, 12, 12, 256)       590080    
                                                             
 batch_normalization_7(BatchNormalization)  (None, 12, 12, 256)      1024      
                                                 
                                                             
 activation_7 (Activation)   (None, 12, 12, 256)       0         
                                                             
 dropout_7 (Dropout)         (None, 12, 12, 256)       0         
                                                             
 max_pooling2d_3 (MaxPooling2D)  (None, 6, 6, 256)        0         
                                                              
                                                             
 dense (Dense)               (None, 6, 6, 4096)        1052672   
                                                             
 dropout_8 (Dropout)         (None, 6, 6, 4096)        0         
                                                             
 dense_1 (Dense)             (None, 6, 6, 4096)        16781312  
                                                             
 dropout_9 (Dropout)         (None, 6, 6, 4096)        0         
                                                             
 global_average_pooling2d (GlobalAveragePooling2D)  (None, 4096)             0         
                                           
                                                             
 dense_2 (Dense)             (None, 48)                196656    
                                                             
 =================================================================
 Total params: 20,361,840
 Trainable params: 20,359,024
 Non-trainable params: 2,816
 ____________________________

output 如下所示:

    Epoch 310/400
    1/1 [==============================] - 0s 191ms/step - loss: 2.5433e-04 - accuracy:         1.0000 - val_loss: 3.7977 - val_accuracy: 0.5000
    Epoch 311/400
    1/1 [==============================] - 0s 82ms/step - loss: 2.5718e-04 - accuracy:   1.0000 - val_loss: 3.7978 - val_accuracy: 0.5000
    Epoch 312/400
    1/1 [==============================] - 0s 81ms/step - loss: 2.5694e-04 - accuracy: 1.0000 - val_loss: 3.7978 - val_accuracy: 0.5000
    Epoch 313/400
    1/1 [==============================] - 0s 82ms/step - loss: 2.5570e-04 - accuracy: 1.0000 - val_loss: 3.7979 - val_accuracy: 0.5000
    Epoch 314/400
    1/1 [==============================] - 0s 81ms/step - loss: 2.5392e-04 - accuracy: 1.0000 - val_loss: 3.7979 - val_accuracy: 0.5000
    Epoch 315/400
    1/1 [==============================] - 0s 82ms/step - loss: 2.5371e-04 - accuracy: 1.0000 - val_loss: 3.7980 - val_accuracy: 0.5000
    Epoch 316/400
    1/1 [==============================] - 0s 81ms/step - loss: 2.5867e-04 - accuracy: 1.0000 - val_loss: 3.7980 - val_accuracy: 0.5000
    Epoch 317/400
    1/1 [==============================] - 0s 81ms/step - loss: 2.5400e-04 - accuracy: 1.0000 - val_loss: 3.7981 - val_accuracy: 0.5000
    Epoch 318/400
    1/1 [==============================] - 0s 83ms/step - loss: 2.5599e-04 - accuracy:    1.0000 - val_loss: 3.7981 - val_accuracy: 0.5000
    Epoch 319/400
    1/1 [==============================] - 0s 83ms/step - loss: 2.5272e-04 - accuracy: 1.0000 - val_loss: 3.7982 - val_accuracy: 0.5000

我该如何解决这个问题?

对于 SNN,您需要实现contrastive_loss而不是二进制 CE,甚至您应该定义具有相同结构和权重的相同模型,然后定义 lambda 层,该层将采用这些模型的 output 并通过 Z968A45F3FZF44B85 计算相似度计算欧几里得距离的层

但是您的 model 只是一侧,并且在 keras.Model() 中仅定义了一个输入,它还需要预处理数据以将它们分组到 Z20F35E630DAF44DBFA4C3F68F68F5399D8CZ 定义相似性或非相似性的标签中的方式但是在安装 model 时,您正在为 model 提供两个输入。

甚至在您的 model 结构中,您在密集层之后实现全局平均池,尽管 model 未定义为分类,因此根本不需要任何密集层? 甚至将 Adam 作为优化器设置为学习率 = 1E-1?!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM