生信小白杨阿云 2021-05-17 22:14 采纳率: 57.1%
浏览 40

sos,CNN训练二分类问题,训练过程准确度反复变化应该怎么解决?

如题,我所用的CNN代码和训练结果见下:我用了Adam和RMSprop,感觉可能用adam激活器要更好一点?但是感觉训练的也不是很令人满意,有大佬可以帮忙指点一下要怎么改进吗?

import tensorflow as tf
from keras.models import Model
from keras.layers.core import Dense, Dropout
from keras.layers.convolutional import Convolution1D, MaxPooling1D
from keras.layers import Embedding,BatchNormalization,LSTM, Bidirectional,Masking, Input, Multiply, Activation, Lambda, Add,Reshape
from keras import models, Sequential
from keras import backend as K
from sklearn import metrics

def cnn_bilstm_am_model(filters=32, kernel_size=3, pooling_size=2, lstm_units=32, embedding_vec=encoding_vectors, attention_size=50):
    model = Sequential()
    model.add(Embedding(len(embedding_vec), len(embedding_vec[0]), weights=[embedding_vec],input_length=2000,trainable=False) )

    model.add(Convolution1D(32, kernel_size, padding='same', activation='relu', use_bias=False) )
    model.add(BatchNormalization())
    model.add(MaxPooling1D(pool_size=pooling_size, strides=1))
    
    model.add(Convolution1D(64, kernel_size, padding='same', activation='relu', use_bias=False) )
    model.add(BatchNormalization())
    model.add(MaxPooling1D(pool_size=pooling_size, strides=1))   
    
    #model.add(Bidirectional(LSTM(lstm_units, dropout=0.1, return_sequences=True) ) )
    
    model.add(tf.keras.layers.Flatten())
    model.add(Dense(256,activation='sigmoid'))
    model.add(Dropout(0.5))
    model.add(Dense(2))
    
    from keras import optimizers
    optim = optimizers.RMSprop(lr=0.001)
    model.compile(loss='binary_crossentropy', optimizer=optim , metrics=['accuracy'],)
        
    return model  


model = cnn_bilstm_am_model()
model.summary()

from keras.callbacks import ModelCheckpoint,EarlyStopping,ReduceLROnPlateau

for fold_num, (train_indices, test_indices) in enumerate(folds):
    if fold_num == 0:
        print('Evaluating fold{}'.format(fold_num+1))
        x_train = X[train_indices]
        y_train = y[train_indices]
        x_test = X[test_indices]
        y_test = y[test_indices]
        
 filepath='./best_model/rmsprop_2cnn_2dense_weights_of_fold{}.best.hdf5'.format(fold_num)
 checkpoint = ModelCheckpoint(filepath, monitor='val_accuracy',  verbose=1,save_best_only=True,mode='max',period=1)
 reducelr = ReduceLROnPlateau(monitor='val_accuracy', factor=0.8,patience=10,verbose=1,mode="max",min_lr=0.0001)
 callbacks_list = [checkpoint,reducelr]   
 train_history = model.fit(x_train,y_train,validation_split=0.1,epochs=100,batch_size=100,verbose=2,callbacks = callbacks_list)

激活器为RMSprop

激活器为Adam

  • 写回答

1条回答 默认 最新

  • GoAI 新星计划导师 2023-02-15 10:52
    关注

    1.尝试调整lr学习率,减小点,建议尝试adam。
    2.尝试调大epoch,改变batch_size大小,一般为8的倍数比较好。

    评论

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python