繁体   English   中英

使用相同种子、代码和数据集的不同机器上的不同精度

[英]Different accuracies on different machines using same seeds, code and dataset

我正在尝试开发一个用于签名识别的 CNN,以识别给定签名属于哪个人。 有 3 个不同的班级(人),每个班级有 23 个签名。 有了这么少量的样本,我决定使用 Keras ImageDataGenerator来创建额外的图像。

然而,在不同机器(Windows 10 和 Mac OS)上测试 CNN 在评估测试数据上的模型时会给出不同的准确度分数。 在 Windows 上为 100%,在 Mac OS 上为 93%。 两台机器都运行 python 3.7.3 64 位。

使用train_test_split中的sklearn.model_selection对数据进行拆分,其中 0.8 用于训练,0.2 用于测试, random_state为 1。数据和标签经过适当的标准化和调整以适合 CNN。 已经尝试了steps_per_epochbatch_sizeepoch的各种数字。

我尝试同时使用np.random.seedtensorflow.set_random_seed ,在 PC 上使用seed(1)生成测试数据的 100% 准确度,但是在另一台机器上使用相同的种子仍然会产生不同的准确度分数。

这是 CNN 架构以及创建附加图像的方法调用。 以下代码在一台机器上产生 100% 的准确率,在另一台机器上产生 93.33% 的准确率。

seed(185)
set_random_seed(185)
X_train, X_test, y_train, y_test = train_test_split(data, labels, train_size=0.8, test_size=0.2, random_state=1)

datagen = ImageDataGenerator()

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

model.fit_generator(datagen.flow(X_train, y_train, batch_size=64), validation_data=(X_test,y_test),steps_per_epoch= 30, epochs=10)

model.evaluate(X_test, y_test)

编辑因此,经过更多研究后,我发现使用不同的硬件,特别是不同的显卡,会导致不同的精度。 保存经过训练的模型并使用它来评估不同机器上的数据是理想的解决方案。

为了社区的利益,即使出现在问题部分,也请在此处(回答部分)提供解决方案。

使用不同的硬件,特别是不同的显卡会导致不同的精度,尽管我们使用相同的种子、代码和数据集。 Saving the trained model and using that to evaluate data是理想的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM