У меня есть проблема двоичной классификации, которую я пытаюсь решить с помощью CNN, написанного на языке Keras.Входными данными являются очень редкие 200X125X2
тензоры (могут быть как два изображения, сгруппированные вместе), и его ненулевые элементы являются только единицами (представляющими нейроны с шипами).Входные данные генерируются с помощью созданного мной генератора данных, поэтому модель обучается с использованием функции fit_generator
.
Я пробовал разные архитектуры, и некоторые показывают приличную производительность (~ 88%), но дело в том, что иногда, когда я тренирую новые модели, они, кажется, не работают вообще, даваяшанс (50%) результат каждую эпоху .Странно то, что иногда случается с теми же архитектурами, которые хорошо работали до .Я использую код в Google Colab (GPU) с TensorFlow 2.0.Я несколько раз проверял, что я ничего не изменил в коде.Я знаю, что случайная инициализация весов и смещений может вызвать небольшие изменения в производительности, но это выглядит как-то иначе.
Любые идеи будут очень полезны.Спасибо!
Вот соответствующий код для одной из моделей, у которых была эта проблема (я использую необычные ядра, я знаю):
# General settings
x_max = 10
x_size, t_size, N_features = parameters(x_max)
batch_size = 64
N_epochs = 10
N_final = 10*N_features
N_final = int(N_final - N_final%(batch_size))
N_val = 100*batch_size
N_test = N_final/5
# Setting up the architecture of the network and compiling
model = Sequential()
model.add(SeparableConv2D(50, (50,30), data_format='channels_first', input_shape=(2,x_size, t_size)))
model.add(MaxPooling2D(pool_size=2, data_format='channels_first'))
model.add(SeparableConv2D(100, (10,6), data_format='channels_first', input_shape=(2,x_size, t_size)))
model.add(MaxPooling2D(pool_size=2, data_format='channels_first'))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fitiing the model on generated data
filepath="......hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')
start = time.time()
fit_history = model_delta.fit_generator(generator = data_generator(batch_size,x_max,'delta','_',100),
steps_per_epoch = N_final//batch_size,
validation_data = data_generator(batch_size,x_max,'delta','_',100),
validation_steps = N_val//batch_size,
callbacks = [checkpoint],
epochs = N_epochs)
end = time.time()