Почему CNN предсказывает только один класс - PullRequest
0 голосов
/ 07 мая 2019

У меня есть модель, которая должна определить, живо ли растение.Только один класс предсказывает, что данные не сбалансированы, но я использовал весовые коэффициенты, чтобы противостоять дисбалансу.

Я рассмотрел множество вопросов об этой проблеме, но ни один из них не работает, очевидно, эта проблема возникает, когдапереоснащение, поэтому я использовал отсев.Но модель все еще только предсказывает один класс.

Вот модель:

model=Sequential()

# Convolutional layer / input layer
model.add(Conv2D(60, 5,5, activation='relu', input_shape=np.shape(X[1])))
model.add(MaxPooling2D(pool_size=(3,3)))

model.add(Dropout(0.8))

model.add(Flatten())

model.add(Dropout(0.7))

model.add(Dense(130, activation='relu'))

model.add(Dropout(0.6))

# Output layer
model.add(Dense(2, activation='softmax'))


model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])

model.fit(X, y, epochs=6, batch_size=32, class_weight=class_weight, validation_data=(X_test, y_test))

Обычно она должна предсказывать оба класса с 1: здоровое растение и 0: нездоровое растение

1 Ответ

0 голосов
/ 09 мая 2019

Поскольку ваша проблема - двоичная классификация, а выходная размерность равна 2, вам следует изменить активацию на softmax.

model.add(Dense(2, activation='softmax'))

Однако, если вы хотите сохранить сигмоид, просто измените свои единицы выходного слоя на 1, таким образом, вы будете выводить, насколько вероятно, что ваш вход является одним из двух классов только с одной единицей.

 model.add(Dense(1, activation='sigmoid'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...