Tensorflow 为什么每次我重新运行程序时,准确性都会改变

Tensorflow 为什么每次我重新运行程序时,准确性都会改变,tensorflow,machine-learning,keras,deep-learning,classification,Tensorflow,Machine Learning,Keras,Deep Learning,Classification,我在训练模型,但我面临的一个问题是,每次我运行程序时,意味着如果模型在10个阶段上训练,其准确率为80%,但在10个阶段后,我重新运行程序,准确率会发生变化,如95%,依此类推,每次我换衣服的时候,我应该坚持第一次还是多次尝试,这是不是一种过度装修的迹象 import numpy as np import tensorflow as tf from imgaug.augmenters import Dropout from sklearn.model_selection import cross

我在训练模型,但我面临的一个问题是,每次我运行程序时,意味着如果模型在10个阶段上训练,其准确率为80%,但在10个阶段后,我重新运行程序,准确率会发生变化,如95%,依此类推,每次我换衣服的时候,我应该坚持第一次还是多次尝试,这是不是一种过度装修的迹象

import numpy as np
import tensorflow as tf
from imgaug.augmenters import Dropout
from sklearn.model_selection import cross_val_score
from keras.wrappers.scikit_learn import KerasClassifier
data = np.load('subclass_features.npy', allow_pickle=True)

from sklearn.model_selection import train_test_split
training_data = np.asarray([i[0] for i in data])  # select upto second last
train_labels = data[:, -1]  # gives the last column vector
print("Shape of training data", training_data.shape)
print("Labels of training data", train_labels.shape)
data = training_data.astype('float32')
data = data / 255
from tensorflow.keras import utils as np_utils

one_hot_train_labels = np_utils.to_categorical(train_labels)


# train_data1, test_data1, train_labels1, test_labels1 = train_test_split(train_data, one_hot_train_labels,random_state=0, test_size=0.3)
def built_classifier():
    classifier = tf.keras.models.Sequential()
    classifier.add(tf.keras.layers.Dense(64, input_shape=(128,), activation='relu'))
    classifier.add(tf.keras.layers.Dense(4, activation='softmax'))
    classifier.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
    classifier.save('SubClassPredictions.h5')
    return classifier


classifier = KerasClassifier(build_fn=built_classifier, epochs=50, batch_size=32, shuffle=True)
accuracies = cross_val_score(classifier, data, one_hot_train_labels, cv=10)
print("Data Accuracy", accuracies)
print("Mean of accuracy is", accuracies.mean())

这可能是由于前向传播期间初始化了随机权重,或者是由于随机分割了数据。它在每次运行时提供不同的训练和测试数据集。可以通过为随机数生成提供种子值来解决此错误

阅读下面的链接,你会对播种有一些直觉


这是否回答了您的问题:是的,它看起来很相似,但实际上我得到了10-15%的差异,我正在寻找关于这类百分比的答案。您是否结束会话或重新编译模型,或只是多次调用fit函数而不重新初始化模型?我每次都重新编译模型,每次fit函数调用。我不知道会话的情况如果权重是随机初始化的,可能会有最小的差异,但我有时会得到10-15%的差异。有时可能是由于训练和测试分离。当你第一次运行代码时,它将以给定的比率随机训练和测试示例,当你再次运行相同的代码时,它将以给定的比率随机训练和测试另一组示例。最好发布你的代码。他们中的大多数人都想帮助你。我已经发布了代码,是我的模型接受npy文件中的功能(不是粘贴在这里)