Я обучал ResNet для варианта изображений DDSM в течение 5 эпох, и он, казалось, улучшал как точность, так и потери в наборе обучения и проверки, но в последнем наборе проверки он просто с треском провалился, несмотря на хорошие результаты во времяпредыдущие эпохи. Я попробовал снова только с 4, а не с 5 эпохами, но то же самое произошло в меньшей степени:
Так что теперь ябеспокоит, я не использую 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% точность предсказания сте же данные , но я не уверен, как применить то, что они сказали, потому что, с одной стороны, я не совсем понимаю, что происходит с нормализацией партии.Это нормально, чтобы настроить нормализацию партии или это что-то вроде хак-у?