首页 > 解决方案 > 狗类型的图像识别不起作用,我的模型可能是问题,但对它很陌生

问题描述

我遇到了这个数据集:https ://www.kaggle.com/jessicali9530/stanford-dogs-dataset

当我尝试遵循 youtube 上的指南时,想尝试自己尝试机器学习。不知道应该如何构建模型。我得到了神经元和层的基本知识,但不确定为什么准确性和损失感觉不对。模型创建的任何指南/解释(Activation、Conv2D、MaxPooling2D、Flatten、loss、optimizer)

我尝试将激活和丢失更改为反复试验来掌握这个概念。

我想我的问题是这些

model = Sequential()
model.add(Conv2D(64,(3,3),input_shape=X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64,(3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(64))

model.add(Dense(1))
model.add(Activation("softmax"))

model.compile(loss="mean_squared_error",
             optimizer="adam",
             metrics=["accuracy"])

我的 Jupyter 笔记本文件: 我的 Jupyter 笔记本文件

准确性和损失 如您所见,准确性是垃圾,损失超出了图表。

标签: tensorflowmachine-learningkerasjupyter-notebook

解决方案


将狗的图像分类为各种类别是一项分类任务。机器学习中有两种类型的问题:分类和回归

分类处理分类标签,因此需要合适的损失函数。您应该使用如下categorical_crossentropy损失函数:

model.compile(loss="categorical_crossentropy",
             optimizer="adam",
             metrics=["accuracy"])

请参阅此处了解更多信息。

均方误差 (MSE)用于回归问题,因为它处理连续标签。它用于为特定数据集找到最佳拟合线,以使 MSE 最小。

我认为这应该可以解决您的问题。如果问题仍然存在,请尝试以下步骤:

  1. 将学习率降低到 0.0001 甚至更小。
  2. 使用Dropout图层。
  3. 使用LeakyReLU图层。

推荐阅读