Я пытаюсь разработать CNN для распознавания подписи, чтобы определить, кому принадлежит данная подпись. Есть 3 разных класса (человек) и 23 подписи для каждого из них. Имея это небольшое количество образцов, я решил использовать Keras ImageDataGenerator
для создания дополнительных изображений.
Однако тестирование CNN на разных машинах (Windows 10 и Mac OS) дает разные оценки точности при оценке модели по данным испытаний. 100% на Windows и 93% на Mac OS. Обе машины работают под управлением Python 3.7.3 64-bit.
Данные разделены с использованием train_test_split
из sklearn.model_selection
с 0,8 для обучения и 0,2 для тестирования, random_state
равно 1. Данные и метки должным образом нормализованы и скорректированы для соответствия CNN. Были опробованы различные числа для steps_per_epoch
, batch_size
и epoch
.
Я пытался использовать и np.random.seed
, и tensorflow.set_random_seed
, создавая 100% точность данных теста, используя seed(1)
на ПК, однако то же начальное число на другом компьютере все еще дает другой показатель точности.
Вот архитектура 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)
EDIT
Поэтому после дополнительных исследований я обнаружил, что использование различного оборудования, в частности разных видеокарт, приведет к различной точности.
Сохранение обученной модели и ее использование для оценки данных на разных машинах является идеальным решением.