Я пытаюсь обучить простую модель CNN для задачи двоичной классификации в Керасе с набором данных изображений, которые я добыл.Проблема в том, что я получаю постоянную точность, val_accuracy и убытки после нескольких эпох.Я неправильно обрабатываю данные?Или это что-то в настройках модели?
Вначале я использовал softmax в качестве конечной функции активации и категориальной косентропии, я также использовал функцию to_categorical на ярлыках.
После прочтениячтобы понять, что обычно вызывает это, я решил вместо этого использовать sigmoid и binary_crossentropy, а не to_categorical.Тем не менее проблема сохраняется, и я начинаю задумываться, не проблема ли это с моими данными (эти два класса слишком похожи) или как я передаю массивы изображений.
conkeras1 = []
pics = os.listdir("/Matrices/")
# I do this for the images of both classes, just keeping it short.
for x in range(len(pics)):
img = image.load_img("Matrices/"+pics[x])
conkeras1.append(img)
conkeras = conkeras1+conkeras2
conkeras = np.array([image.img_to_array(x) for x in conkeras]).astype("float32")
conkeras = conkeras / 255 # I also tried normalizing with a z-score with no success
yecs1 = [1]*len(conkeras1)
yecs2 = [0]*len(conkeras2)
y_train = yecs1+yecs2
y_train = np.array(y_train).astype("float32")
model = Sequential([
Conv2D(64, (3, 3), input_shape=conkeras.shape[1:], padding="same", activation="relu"),
Conv2D(32, (3, 3), activation="relu", padding="same"),
Flatten(),
Dense(500, activation="relu"),
#Dense(4096, activation="relu"),
Dense(1, activation="sigmoid")
])
model.compile(loss=keras.losses.binary_crossentropy,
optimizer=keras.optimizers.Adam(lr=0.001),
metrics=['accuracy'])
history = model.fit(conkeras, y_train,
batch_size=32,
epochs=32, shuffle=True,
verbose=1,
callbacks=[tensorboard])
Вывод, который я получаю, таков:
975/975 [==============================] - 107s 110ms/step - loss: 8.0022 - acc: 0.4800
Epoch 2/32
975/975 [==============================] - 99s 101ms/step - loss: 8.1756 - acc: 0.4872
Epoch 3/32
975/975 [==============================] - 97s 100ms/step - loss: 8.1756 - acc: 0.4872
Epoch 4/32
975/975 [==============================] - 97s 99ms/step - loss: 8.1756 - acc: 0.4872
и это формы набора и меток
>>> conkeras.shape
(975, 100, 100, 3)
>>> y_train.shape
(975,)