相同的 Keras 模型在 Ubuntu 和 windows 之间得到不同的结果?

Same Keras model got different result between Ubuntu and windows?

我想用我的 linux 电脑来训练模型。 我在windows中直接加载了预训练模型,但是loss变大了,准确率下降了。

这是我的训练模型

def create_model(self):
    print("CREATE NEW MODEL")
    input_img = Input(shape=(nb_features,))

    selection = Dense(64, activation='relu')(input_img)
    selection = Dropout(0.20)(selection)
    selection = Dense(32, activation='relu')(selection)
    selection_out1 = Dropout(0.20)(selection)
    selection_out2 = Dense(nb_class)(selection_out1)
    selection_out3 = Activation("softmax")(selection_out2)

    self.model_1 = Model(input=input_img, output=selection_out1)
    self.model_2 = Model(input=input_img, output=selection_out2)
    # construct the selection model 
    self.model_3 = Model(input=input_img, output=selection_out3)
    # compile autoencoder
    self.model_3.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

def save_model(self, num=0):
    if num == -1:
        self.model_1.save("./model/model_1_")
        self.model_2.save("./model/model_2_")
        self.model_3.save("./model/model_3_")
    else:
        self.model_1.save("./model/model_1_" + str(num))
        self.model_2.save("./model/model_2_" + str(num))
        self.model_3.save("./model/model_3_" + str(num))

这是我的输出

Ubuntu
Epoch 193/200
6375/6375 [==============================] - 0s 14us/step - loss: 0.0188 - 
acc: 0.9936
Epoch 194/200
6375/6375 [==============================] - 0s 14us/step - loss: 0.0151 - 
acc: 0.9956

Windows
Epoch 193/200
6375/6375 [==============================] - 0s 17us/step - loss: 0.0043 - 
acc: 0.9995
Epoch 194/200
6375/6375 [==============================] - 0s 17us/step - loss: 0.0019 - 
acc: 0.9997

Ubuntu似乎总是有一些未消除的错误。

首先,两个系统之间的 tensorflowkerasnumpy 版本可能存在差异。如果这些不相同,则问题很可能是因为版本之间的实现存在细微差异,而不是 ubuntu 和 windows 之间的差异。

假设你们的版本相同:

所有这些都是因为您的模型架构相同并不意味着它会得到相同的结果。

在任何训练开始之前,每一层都需要初始化一些权重作为开始。一般默认的初始化函数是glorot_uniform,在一定范围内从均匀分布中随机抽取样本

另外 Dropout 层在训练期间关闭随机神经元,这也会增加模型在不同训练课程中的表现差异。

您看到的区别不是 ubuntu 与 windows,而是不同的初始权重和 Dropout 在训练期间关闭不同的神经元。