【问题标题】:Could not increase accuracy from a fixed threshold using Keras Dense layer ANN无法使用 Keras Dense 层 ANN 从固定阈值提高准确度
【发布时间】:2019-11-14 05:21:19
【问题描述】:

我正在学习使用 Keras 的密集层的最简单的神经网络。我正在尝试在一个相对较小的数据集上实现人脸识别(总共约 250 张图像,每类 50 张图像)。

我已经从谷歌图片下载了图片,并将它们调整为 100 * 100 png 文件。然后我将这些文件读入numpy 数组,并创建了一个热标签数组来训练我的模型。

这是我处理训练数据的代码:

X, Y = [], []
feature_map = {
    'Alia Bhatt': 0,
    'Dipika Padukon': 1,
    'Shahrukh khan': 2,
    'amitabh bachchan': 3,
    'ayushmann khurrana': 4
}
for each_dir in os.listdir('.'):
  if os.path.isdir(each_dir):
    for each_file in os.listdir(each_dir):
      X.append(cv2.imread(os.path.join(each_dir, each_file), -1).reshape(1, -1))
      Y.append(feature_map[os.path.basename(each_file).split('-')[0]])

X = np.squeeze(X)
X = X / 255.0 # normalize the training data
Y = np.array(Y)
Y = np.eye(5)[Y]
print (X.shape)
print (Y.shape)

这是打印(244, 40000)(244, 5)。这是我的模型:

model = Sequential()

model.add(Dense(8000, input_dim = 40000, activation = 'relu'))
model.add(Dense(1200, activation = 'relu'))
model.add(Dense(700, activation = 'relu'))
model.add(Dense(100, activation = 'relu'))
model.add(Dense(5, activation = 'softmax'))

# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=25, batch_size=15)

当我训练模型时,它停留在0.2172 的准确度上,这几乎与随机预测 (0.20) 相同。

我也尝试过使用灰度图像训练模式,但仍然没有达到预期的准确性。还通过改变隐藏层和隐藏层中神经元的数量来尝试不同的网络架构。

我在这里缺少什么?我的数据集太小了吗?还是我遗漏了任何其他技术细节?

更多代码细节,这里是我的笔记本:https://colab.research.google.com/drive/1hSVirKYO5NFH3VWtXfr1h6y0sxHjI5Ey

【问题讨论】:

    标签: python machine-learning keras deep-learning artificial-intelligence


    【解决方案1】:

    我可以提出两个建议:

    1. 您的数据集可能太小了。如果您以 80/20 拆分训练和验证,这意味着您只训练 200 张图像,这可能太小了。尝试增加您的数据集,看看结果是否有所改善。

    2. 我建议将 Dropout 添加到网络的每一层,因为您的训练集非常小。您的网络很可能会过度拟合您的训练数据集,因为它太小了,而 Dropout 是帮助避免此问题的一种简单方法。

    如果这些建议有帮助,请告诉我!

    【讨论】:

      【解决方案2】:

      我同意数据集太小,每个人 50 个实例可能还不够。您可以使用带有 keras ImageDataGenerator 方法的数据增强来增加图像的数量,并将您的 numpy 重塑代码重写为生成器的预处理函数。我还注意到您没有对数据进行洗牌,因此网络可能会预测所有内容的第一类(这可能是准确率接近随机概率的原因)。

      如果增加数据集大小没有帮助,您可能不得不调整 Adam 优化器的学习率。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        • 2011-09-10
        • 2018-10-09
        相关资源
        最近更新 更多