为什么CNN Keras的所有结果都相同

时间:2018-04-30 14:26:02

标签: tensorflow neural-network keras artificial-intelligence conv-neural-network

我在Keras的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"])

结果 The result of predictions

1 个答案:

答案 0 :(得分:0)

由于您有最终的sigmoid图层并且正在使用binary_crossentropy,因此请尝试将标签编码为0和1的Nx1向量。

以下几行将它们转换为Nx2向量,通常用于最终的softmax图层。

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

如果Y_trainY_test已经是0和1的Nx1,请尝试对上述行进行评论。