当前位置: 首页 > 知识库问答 >
问题:

如何纠正/改善我的CNN模型?如何处理验证精度冻结问题?

叶鸿振
2023-03-14

验证集精度冻结在0.0909。这不合身吗?如何解决该问题以获得更好的模型精度。该模型稍后将转换为tflite,部署在android上。

我的模型:

model = Sequential([
Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', input_shape=(224, 224, 3)),
MaxPool2D(pool_size=(2, 2), strides=2),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same'),
MaxPool2D(pool_size=(2, 2), strides=2),
Conv2D(filters=128, kernel_size=(3, 3), activation='relu', padding='same'),
MaxPool2D(pool_size=(2, 2), strides=2),
Flatten(),
Dense(units=train_batches.num_classes, activation='softmax')

])

model.summary()

conv2d(conv2d)(无、224、224、32)896

max_pooling2d(MaxPooling2D)(无,112, 112, 32) 0

conv2d_1(conv2d)(无、112、112、64)18496

max_pooling2d_1(MaxPooling2(无,56, 56, 64) 0

conv2d_2(Conv2D)(无,56, 56, 128) 73856

最大池2D_2(最大池2(无、28、28、128)0

展平(展平)(无,100352)0

总参数: 1,197,131可训练参数: 1,197,131不可训练参数: 0

model.compile(optimizer=Adam(learning_rate=0.01), loss=categorical_crossentropy, metrics=['accuracy'])

model.fit(x=train_batches, validation_data=valid_batches, epochs=10, verbose=2)

Epoch 1/10
53/53 - 31s - loss: 273.5211 - accuracy: 0.0777 - val_loss: 2.3989 - val_accuracy: 0.0909
Epoch 2/10
53/53 - 27s - loss: 2.4001 - accuracy: 0.0928 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 3/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0795 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 4/10
53/53 - 29s - loss: 2.4006 - accuracy: 0.0739 - val_loss: 2.3989 - val_accuracy: 0.0909
Epoch 5/10
53/53 - 29s - loss: 2.3999 - accuracy: 0.0720 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 6/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0720 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 7/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0682 - val_loss: 2.3993 - val_accuracy: 0.0909
Epoch 8/10
53/53 - 29s - loss: 2.3995 - accuracy: 0.0871 - val_loss: 2.3986 - val_accuracy: 0.0909  
Epoch 9/10
53/53 - 29s - loss: 2.4008 - accuracy: 0.0852 - val_loss: 2.3988 - val_accuracy: 0.0909
Epoch 10/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0833 - val_loss: 2.3991 - val_accuracy: 0.0909

共有1个答案

傅胡媚
2023-03-14

尝试以较低的学习率。还要检查数据集。我的意思是你正在使用的数据集,如果它是一个小的,使用图像增强来增加它,这样模型可以更好地学习它。使用批量归一化以及正则化技术和LR调度程序,因为您的梯度下降正在落入局部极小值。

 类似资料:
  • 问题内容: 正确,我的junit测试看起来像是一个漫长的故事: 我创建了4位用户 我删除了1位用户 我尝试使用已删除的用户登录,并确保失败 我使用剩余的3个用户之一登录并确认我可以登录 我从一个用户向另一个用户发送一条消息,并验证该消息是否出现在发件人的发件箱和收件人的收件箱中。 我删除邮件 … … 优点 :测试非常有效(非常善于检测错误)并且非常稳定,因为它们仅使用API​​,如果我重构代码,那

  • 问题内容: 我的junit测试看起来像是一个漫长的故事: 我创建了4位用户 我删除了1位用户 我尝试使用已删除的用户登录,并确保失败 我使用剩余的3个用户之一登录并确认我可以登录 我从一个用户向另一个用户发送一条消息,并验证该消息是否出现在发件人的发件箱和收件人的收件箱中。 我删除邮件 … … 优点:测试非常有效(非常善于检测错误)并且非常稳定,因为它们仅使用API​​,如果我重构代码,那么测试也

  • 我有许多可触摸的项目,使用TouchableOpacity制作它们,但问题是在应用程序中所有的按钮都变暗了,看起来不那么有吸引力。我使用原生反馈,在android中看起来很好,但在ios中很笨,有什么方法可以在不使用所有按钮和react native的振动api的情况下使ms振动?

  • 对于雄辩的save方法,是否有一种简单的方法来检查一行是否确实发生了更改?类似于的内容是否有说服力? 我发现的唯一解决方法是从Laravel Eloquent update中获得的,只要做了以下更改: 但是,这是否可以在不需要变量和检查的情况下找到更短的结果?我不想在每个控制器中重复这种逻辑。 我正在寻找这样的东西: 但是这不起作用,因为

  • 问题内容: 动机 最近,我在寻找一种无需向构造函数传递大量参数即可初始化复杂对象的方法。我使用了构建器模式进行了尝试,但是我不喜欢这样的事实,即如果我真的设置了所有需要的值,就无法在编译时检查。 传统建筑图案 当我使用构建器模式创建对象时,创建起来更“类型安全”,因为更容易了解参数的用途: 但是现在我有一个问题,我很容易错过一个重要的参数。我可以在方法中检查它,但这仅在运行时进行。如果我错过了一些

  • 问题内容: 我有以下虚拟测试脚本: 这将打印结果,而仅打印结果(如果使用计算器)。据我了解,这是由于浮点乘法精度的错误。 有没有人有一个好的解决方案,这样在这种情况下我可以获得正确的结果?我知道还有类似的函数,或者四舍五入是另一种可能性,但是我真的想在不进行任何四舍五入的情况下打印出完整的数字。只是想知道你们中的一个人是否有一些不错的,优雅的解决方案。 当然,否则我将四舍五入到大约10位数字。 问