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

时间:2019-02-01 03:04:39

标签: python tensorflow machine-learning keras training-data

我想用我的linux计算机训练模型。 我直接在Windows中加载了预训练模型,但是损失越来越大,准确性下降了。

这是我的训练模式

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似乎总是存在一些无法消除的错误。

1 个答案:

答案 0 :(得分:0)

首先,两个系统之间的tensorflowkerasnumpy版本可能有所不同。如果不相同,则问题很可能是由于版本之间的实现上的细微差异,而不是ubuntu和Windows中的差异。

假设您的版本相同:

全部是因为您的模型架构相同,并不意味着它将获得相同的结果。

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

另外,Dropout层在训练过程中会关闭随机神经元,这也会增加模型在不同训练过程中的表现方式。

您看到的区别不是Ubuntu与Windows,而是初始权重不同,Dropout在训练过程中关闭了不同的神经元。