ResNet, кажется, тренируется нормально, но в последнюю эпоху за последние 5 минут становится ужасной точностью - PullRequest
1 голос
/ 06 мая 2019

Я обучал ResNet для варианта изображений DDSM в течение 5 эпох, и он, казалось, улучшал как точность, так и потери в наборе обучения и проверки, но в последнем наборе проверки он просто с треском провалился, несмотря на хорошие результаты во времяпредыдущие эпохи.enter image description here Я попробовал снова только с 4, а не с 5 эпохами, но то же самое произошло в меньшей степени: enter image description here

Так что теперь ябеспокоит, я не использую resnet должным образом?

Использование оптимизатора Adam со скоростью обучения 0,0001.Код, который устанавливает модель:

def build_model(n_classes,df,x='filename',y='y', bs_train = 32, lr = 0.0001,H = 299,W = 299, n_channels = 3):
#Data generator
train_df, val_df = train_test_split(df, test_size=0.2, random_state=42, stratify=df[y])
val_df.reset_index(inplace=True)
val_df.drop(['index'], axis=1, inplace=True)
train_datagen = ImageDataGenerator(
        rescale=1./255)
val_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_dataframe(
    directory='images',
    dataframe=train_df,
    x_col=x,
    y_col=y,
    # width by height only, not channels
    target_size=(H, W),
    color_mode="rgb",
    batch_size=bs_train,
    class_mode="categorical",
    shuffle=True,
    seed=42
)

val_generator = val_datagen.flow_from_dataframe(
    directory='images',
    dataframe=val_df,
    x_col=x,
    y_col=y,
    # width by height only, not channels
    target_size=(H, W),
    color_mode="rgb",
    batch_size=bs_train,
    class_mode="categorical",
    shuffle=True,
    seed=42
)
#Class weight
all_classes = df[y].unique()
class_weights = compute_class_weight(class_weight='balanced', classes=all_classes, y=train_df[y])
#Model architecture
inp = Input(shape = (H,W,n_channels))

model = ResNet50(input_shape=(H,W,n_channels), include_top=False, weights='imagenet')
x1 = model(inp)
x2 = GlobalAveragePooling2D()(x1)
out = Dense(n_classes, activation='softmax')(x2)

model = Model(inputs = inp, outputs = out)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

STEP_SIZE_TRAIN = train_generator.n//train_generator.batch_size
STEP_SIZE_VAL = val_generator.n//val_generator.batch_size

return model, train_generator, val_generator, class_weights, STEP_SIZE_TRAIN, STEP_SIZE_VAL

Я посмотрел на оба Точность поезда падает в некоторые эпохи и ResNet: 100% точность во время обучения, но 33% точность предсказания сте же данные , но я не уверен, как применить то, что они сказали, потому что, с одной стороны, я не совсем понимаю, что происходит с нормализацией партии.Это нормально, чтобы настроить нормализацию партии или это что-то вроде хак-у?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...