Почему Inception V3, прошедший переподготовку с использованием тензорного потока и кера в одном наборе данных, показывает разную точность? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь переучить Inception V3, предварительно обученный в наборе данных ImageNet.

******* Keras (используя бэкэнд Tensorflow)

Я переобучился Inception V3 с использованием Keras (бэкэнд тензор потока) со следующим кодом:

# SETUP MODEL
CLASSES = 3
base_model = InceptionV3(weights='imagenet', include_top=False)
x=base_model.output
x=GlobalAveragePooling2D()(x)
preds=Dense(CLASSES,activation='softmax')(x) #final layer with softmax activation

model=Model(inputs=base_model.input,outputs=preds)

# transfer learning
for layer in base_model.layers:
    layer.trainable = False

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

# train the network
print("[INFO] training network...")
H = model.fit_generator(
    aug.flow(trainX, trainY, batch_size=BS),
    validation_data=(testX, testY),
    steps_per_epoch=len(trainX) // BS,
    epochs=EPOCHS, verbose=1, callbacks=[csv_logger])

После обучения в течение 100 эпох я получаю точность от 85% до 90% , как показано на графике: Результат тренировки с использованием Keras plor

******** Tensorflow **********

Я также прошел переподготовку Inception V3, прошедшего предварительную подготовку в ImageNet с использованием Tensorflow, по ссылке: Как восстановить классификатор изображений для новых категорий . После 4000 итераций я получаю точность от 93% до 96% , как показано на графике ниже: Результат обучения с использованием Tensorflow

Может ли кто-нибудь помочь мне найти объяснение по этой причине или указать на ошибку (если есть) для моей интерпретации.

На самом деле в Керасе я использую:

низкая скорость обучения = 0,001 эпох = 100 и размер партии = 32 Увеличение данных с

aug = ImageDataGenerator(rotation_range=25, width_shift_range=0.1,
    height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
    horizontal_flip=True, fill_mode="nearest")

С другой стороны:

В тензорном потоке я использую

выше скорость обучения = 0,01

Нет Методы увеличения.

Но, похоже, модель тензорного потока достигает более высокой точности. Если кто-нибудь знает о каких-либо хитростях тензорного потока Как восстановить классификатор изображений для новых категорий или какие-либо возможные логические причины этого различия, помогите мне разобраться.

1 Ответ

0 голосов
/ 22 апреля 2019

Существует множество причин, по которым вы можете увидеть различия. Я думаю, что более важной частью является изучение некоторых вещей, которые вы, возможно, захотите узнать во время вашего путешествия здесь.

Сначала вы должны проверять точность каждые x эпох. Если точность не улучшится после, скажем, 3 эпох, вам нужно закончить тренировку.

Вам необходимо иметь несколько четных изображений в каждом классе, иначе один класс будет перепредставлен в вашем пакете.

Возможно, вы захотите включить в свой конвейер некоторые методы дополнения, чтобы избежать переобучения. Это включает в себя вращение, обрезку, размытие, шум и т. Д. В процентах от ваших изображений, когда они поступают в пакет. Это также может помочь решить проблему нехватки изображений на класс.

Вы, вероятно, тоже не выбираете лучшую скорость обучения, что важно.

Я бы посоветовал взглянуть на раздел fast.ai по классификации изображений и переключиться на библиотеку fastai по тензорному потоку.

...