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

У меня есть проблема в моем коде CNN в Керасе после построения простой архитектуры нейронной сети и запуска функции прогнозирования все прогнозы имеют одинаковые результаты Мои собственные данные разделены на два класса (здоровые, нездоровые) Раньше я думал, что проблема заключается в природе картины но когда я применил код в других данных, содержащихся из (белое изображение, черное изображение) я нашел такие же результаты Какова причина проблемы на ваш взгляд


Моя архитектура Код CNN

#batch_size to train
batch_size = 32
# number of output classes
nb_classes = 2
# number of epochs to train
nb_epoch = 2
# number of convolutional filters to use
nb_filters = 32
# size of pooling area for max pooling
nb_pool = 2
# convolution kernel size
nb_conv = 3

HIDDEN_LAYERS = 4

sgd = SGD(lr=0.5, decay=1e-6, momentum=0.6, nesterov=True)

Y_train = np_utils.to_categorical(Y_train, nb_classes)
Y_test = np_utils.to_categorical(Y_test, nb_classes)

X_train /= 255
X_test /= 255

# first set of CONV => RELU => POOL layers
model = Sequential()
model.add(Conv2D(20, (5, 5), padding="same",
input_shape=shape_ord))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool), strides=(2, 2)))

# second set of CONV => RELU => POOL layers
model.add(Conv2D(50, (5, 5), padding="same"))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool), strides=(2, 2)))
model.add(Dropout(0.5))
# first (and only) set of FC => RELU layers
model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
#model.add(Dropout(0.5))


# softmax classifier
model.add(Dense(nb_classes))
model.add(Activation(K.sigmoid))
#categorical_crossentropy
model.compile(loss="binary_crossentropy", optimizer=sgd,metrics=["accuracy"])

Результаты Результат прогнозов

1 Ответ

0 голосов
/ 02 мая 2018

Поскольку у вас есть последний сигмовидный слой и вы используете binary_crossentropy, попробуйте закодировать ваши метки как вектор Nx1, равный 0 и 1.

Строки ниже преобразуют их в вектор Nx2, который вы обычно используете с финальным слоем softmax.

Y_train = np_utils.to_categorical(Y_train, nb_classes)
Y_test = np_utils.to_categorical(Y_test, nb_classes)

Если Y_train и Y_test уже являются Nx1 из 0 и 1, попробуйте закомментировать вышеприведенные строки.

...