首页 > 解决方案 > VGGnet 在训练时不学习

问题描述

VGGNet 在微调时没有学习。

我在 ECG 数据上训练了 VGGnet 16 层模型。之后,我设计了一个采用conv_baseVGGnet 和全连接层的新模型。新模型根本没有学习。它显示出相同的准确性和每个时代的损失。后来我使用 Keras 库从头开始设计了完整的 new_model(VGGNet 的一些变体),但是这个模型在训练时也没有改进。可能的原因是什么?无论我训练什么模型(过去效果很好),都给出了相同的 89.02% acc。

Model summary is Layer (type)    Output Shape         Param #     Connected to                     
input_1 (InputLayer)            (None, 1201, 1)         0            

input_2 (InputLayer)            (None, 401, 1)          0            

sequential_1 (Sequential)       (None, 2560)         8176064     input_1[0][0]                    
sequential_2 (Sequential)       (None, 25088)        49664       input_2[0][0]                    
concatenate_1 (Concatenate)     (None, 27648)        0           sequential_1[1][0], sequential_2[1][0]               
dense_1 (Dense)                 (None, 1024)         28312576    concatenate_1[0][0]              
dropout_1 (Dropout)             (None, 1024)         0           dense_1[0][0]                    
dense_2 (Dense)                 (None, 512)          524800      dropout_1[0][0]                  
dropout_2 (Dropout)             (None, 512)          0           dense_2[0][0]                    
dense_3 (Dense)                 (None, 256)          131328      dropout_2[0][0]                  
dropout_3 (Dropout)             (None, 256)          0           dense_3[0][0]                    
dense_4 (Dense)                 (None, 64)           16448       dropout_3[0][0]                  
dense_5 (Dense)                 (None, 2)            130         dense_4[0][0]

培训代码

    from keras.optimizers import adam



    from keras.callbacks import ModelCheckpoint
    checkpointer = 
    ModelCheckpoint(filepath='modifiedVGGBasic.bestweights.hdf5', 
    verbose=1, monitor='val_acc',mode='max', \
                               save_best_only=True)
    earlystop = EarlyStopping(monitor='val_acc', min_delta=0.001, patience=50, \
                    verbose=2, mode='max', restore_best_weights=True)

    ecg_model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['acc'])

     result =ecg_model.fit([xt1r,xt2r],yt,validation_data=([xv1r,xv2r],yv), \
                  batch_size=128,class_weight=class_weights, \
                   epochs=150, verbose=2, callbacks=[earlystop, checkpointer])

两个时期的输出如下所示。它在所有时期都提供相同的 89.02% 准确率并且不学习。

训练 53819 个样本,验证 13455 个样本

纪元 1/150 - 916s - 损失:1.7631 - acc:0.8866 - val_loss:1.7705 - val_acc:0.8902

纪元 00001:val_acc 从 -inf 提高到 0.89015,将模型保存到 modifiedVGGBasic.bestweights.hdf5

纪元 2/150 - 888s - 损失:1.7703 - acc:0.8902 - val_loss:1.7705 - val_acc:0.8902

标签: pythonkerasvgg-net

解决方案


推荐阅读