2

Ich versuche, InceptionV3-Modell mit meinem benutzerdefinierten Datensatz (bestehend aus 2 Klassen) Feinabstimmung, aber ich erhalte sehr geringe Genauigkeit für Training und Validierung. Was sollte ich tun, um die Genauigkeit zu erhöhen? Oder haben Sie andere Netzwerk-Ideen/Implementierungen für diesen Zweck?Inception V3 Feintuning: Warum erziele ich mit InceptionV3 Feinabstimmung eine sehr niedrige (.37) Genauigkeit?

Mein Code:

from keras.datasets import cifar10 
from keras.utils import * 
from keras.optimizers import SGD 
from keras.layers import Input,Dense,Flatten,Dropout,GlobalAveragePooling2D 
from keras.preprocessing.image import ImageDataGenerator 
from keras.preprocessing import image 
from keras.applications.vgg16 import preprocess_input 
from keras.models import Model 
from keras.applications.inception_v3 import InceptionV3 
import numpy as np 
import cv2 

epochs = 10 
steps_per_epoch = 300 
validation_steps = 300 
input_shape=(64, 64, 3) 
image_rows=64 
image_cols=64 

train_datagen = ImageDataGenerator(
    rescale=1./255, 
    shear_range=0.2, 
    zoom_range=0.2, 
    horizontal_flip=True) 

test_datagen = ImageDataGenerator(rescale=1./255) 

train_generator = train_datagen.flow_from_directory(
    'dataset/train', 
    target_size=(image_rows, image_cols), 
    batch_size=32, 
    class_mode='categorical') 

validation_generator = test_datagen.flow_from_directory(
    'dataset/evaluate', 
    target_size=(image_rows, image_cols), 
    batch_size=32, 
    class_mode='categorical') 


inputs = Input(shape=input_shape) 

base_model = InceptionV3(weights='imagenet', include_top=False) 
x = base_model.output 
x = GlobalAveragePooling2D()(x) 
x = Dense(1024, activation='relu')(x) 
predictions = Dense(2, activation='softmax')(x) 
model = Model(input=base_model.input, output=predictions) 


for layer in base_model.layers: 
    layer.trainable = False 


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


model.fit_generator(
     train_generator, 
     steps_per_epoch=steps_per_epoch, 
     epochs=epochs, 
     validation_data=validation_generator, 
     validation_steps=validation_steps) 
+1

Können Sie Ihre 'model.summary()'? Es scheint, dass Ihre Eingabe für Inception zu klein ist. –

+0

Zu lange, um hier zu posten –

+0

Verwendung z.B. Pastebin –

Antwort

3

Ihr Problem in der Tatsache liegt, dass die nach Keras InceptionV3 documentation - eine minimale Eingangsgröße 139. So ist - aufgrund der Tatsache, dass Ihr Netzwerk Eingangsgröße 64 - Ihre Netzwerk funktioniert nicht gut. Um dieses Problem zu überwinden:

  • ändern Eingabegröße sein n, wo n > 139,
  • In jedem flow_from_directory - ändern Sie die target_size-.
+0

Danke für Ihre Antwort! Sobald ich deine Lösung versuche, werde ich Feedback geben! –

+0

Ergebnis der ersten 6 Epochen sind: 0.4615, 0.69, 0.77, 0.58, 0.58, 0.38 Nicht sicher, ob dies durch das Eingabeformat oder durch mein Netzwerk verursacht wird. –

+0

Verringern Sie die Dichte auf 128 –

Verwandte Themen