Keras 训练结果不一致

数据挖掘 机器学习 神经网络 喀拉斯 张量流
2022-03-07 11:53:44

我在 keras 有一个 CNN 网络。我在云 GPU 上进行训练。当我运行两次训练时,我得到完全不同的准确率和损失图。我如下设置随机种子,仍然没有运气。有什么遗漏吗?或者这是外部 GPU 上的正常行为?我读到有时它们会因为它们可能使用的某些库而引起随机性?每次跑步时,我都会看到 %2-4 的准确性差异。所以很难判断我的超参数调整。

import numpy as np
np.random.seed(3)
import tensorflow as tf
tf.set_random_seed(4)
import keras
keras.backend.clear_session()


from keras.layers import LeakyReLU
from keras.models import Sequential
from keras.layers import Activation
from keras.layers import Convolution2D, MaxPooling2D, Dropout, Reshape
from keras.layers.pooling import GlobalAveragePooling2D
from keras.optimizers import Adamax, Adadelta, Adagrad, Adam, RMSprop
from keras.callbacks import EarlyStopping, ModelCheckpoint, 
 ReduceLROnPlateau
from keras.regularizers import l2,l1,l1_l2
from sklearn.metrics import precision_recall_fscore_support, 
 roc_auc_score
from keras.models import model_from_json
from keras.layers.normalization import BatchNormalization
from sklearn.metrics import confusion_matrix, f1_score, 
 precision_score, recall_score
import keras.backend as K
from keras.layers import Dense, Dropout, Flatten
from sklearn.preprocessing import Normalizer
1个回答

Dropout层会在训练中引入随机性(噪声),因为随机神经元在每个时期都会被禁用。这导致每次训练的结果略有不同,但整体性能应该相似,尤其是对于大量的 epoch。

为了设置层的种子,您应该在初始化层时Droupout修改参数为,如官方网页中所述。seed=Nonekeras.layers.Dropout(rate, noise_shape=None, seed=None)