Keras模型(即使在训练过程中)只预测0

我正在尝试训练一个Keras图像分类器来预测图像中的杂草(1)和草(0)。然而,无论我尝试构建什么样的方法/模型,准确率都会陷入停滞,我的意思是训练准确率看起来像是只在预测0。我可以确认这一点,因为当我将标签数组改为只包含0时,模型声称准确率为1.00,但当我将所有标签改为1时,模型准确率为0.00。我所有的图像都已缩放并转换为RGB格式。以下是代码:

def prep_image(filename):  im = cv2.imread(filename, 0)  new_im = cv2.resize(im, (400,530))  arr = np.array(new_im)  arr = np.reshape(arr, (530, 400))  return arrimage_files = [] #包含图像文件路径的列表images = [] #包含数组/图像的列表labels = []n_classes = 2def add_image_data(root):  global images  global labels  print("starting")  delim = os.sep  for dirpath, dirs, files in tqdm(os.walk(root)):     for file in [f for f in files if (f.endswith(".jpg"))]:      image_files.append(os.path.join(dirpath, file))  for file in tqdm(image_files):    image_arr = prep_image(file)    images.append(image_arr)    #print("supposed added ", file)    label = file.split(delim)[-2]    if label == "Grass":      label = 0;    else:      label = 1;    labels.append(label)  images = np.array(images)  labels = np.array(labels)

然后我应用to_categorical(labels)对它们进行独热编码模型:

model = Sequential()model.add(Conv2D(32, kernel_size=3, input_shape=(530, 400, 1)))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.2))model.add(Conv2D(32, kernel_size=3))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.5))model.add(Conv2D(64, kernel_size=3))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten())model.add(Dense(64))model.add(Activation('relu'))#model.add(Dropout(0.5))model.add(Dense(2)) #或n_clasessmodel.add(Activation('softmax'))model.compile(optimizer=Adam(0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

似乎也没有任何学习过程,损失和准确率在第一个epoch后就陷入停滞。标签包含两种类别。提前感谢


回答:

你有查看过你的预测分数吗?如果准确率指标基于预测分数> 0.5,那么可能你的类别实际上没有一个得分超过0.5。这可能是由于类别不平衡造成的。你可以调整“正面”预测的阈值。

尝试使用AUC这样的指标,或者只是打印出你的预测并检查分数。

从评论中编辑:你是否正确地预处理了你的输入?归一化等。如果你的输入值太大,梯度将无法正常流动。

缺乏归一化会阻止梯度流动。这是由于如果你所有的输入值都太大/太小,你将无法利用激活函数中的非线性特性。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注