Keras模型(即使在训练期间)也只能预测0

时间:2019-03-05 14:59:08

标签: python machine-learning keras

我正在尝试训练一个keras图像分类器,以预测图像中的杂草(1)和草(0)之间。但是,无论我尝试构建哪种方法/模型,准确性都将卡住,这意味着训练准确性就像仅预测0一样。我可以确认这一点,因为当我将标签数组更改为仅包含零时,模型以某种方式要求1.00的精度,但是当我将标签全部更改为1时,模型的精度为0.00。我所有的图像都会缩放并转换为rgb。 这是代码:

php://output

然后我将to_categorical(labels)应用于一键编码 型号:

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 arr

image_files = [] #contains the file paths of the images
images = [] # contains arrays/images
labels = []
n_classes = 2
def 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)

似乎也没有进行任何学习,损失和准确性似乎在第一个时期之后就陷入了困境。标签包含两个类。 预先感谢

3 个答案:

答案 0 :(得分:1)

您是否查看了预测分数?如果准确性度量标准的预测得分大于0.5,则可能是您的所有班级实际上都没有获得大于0.5的得分。这可能是由于阶级失衡造成的。然后,您可以更改“阳性”预测的阈值。

尝试改用AUC之类的指标,或者只是打印出您的预测并检查分数。

根据评论进行编辑: 您是否正确预处理了输入?归一化等。如果输入值太大,则渐变将无法正常流动。

缺少归一化将停止梯度流。这是由于以下事实:如果您的值对于所有输入而言太大/太小,您将不会使用激活函数中的非线性。

答案 1 :(得分:0)

您的数据集不平衡吗?当数据集严重不平衡时,这是一个常见问题。这意味着一个或多个班级和方式比其他班级更频繁。您的模型发现,达到相当高的准确性的最简单方法是猜测最频繁的课程。这会使学习优化方式变得更困难。

您可以尝试几种处理不平衡数据集的方法:https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/

答案 2 :(得分:0)

我认为问题可能在于,您正在将标签(0或1)与softmax的结果进行比较,softmax的结果是两个值,代表对象属于该类别的概率。

您应该像这样进行一次热编码转换: 0-> [1,0] 1-> [0,1]

这样,神经网络的输出和标签的格式相同,可以进行比较。