为了账号安全,请及时绑定邮箱和手机立即绑定

Keras模型不训练层,验证精度始终为0.5

Keras模型不训练层,验证精度始终为0.5

繁花如伊 2022-08-02 16:11:22
我的Keras CNN模型(基于AlexNet的实现)的训练精度始终接近0.5(在+-0.02范围内),并且验证精度始终为0.5,无论哪个时期。它是一个二元分类模型,其中训练/val 拆分大约为 85/15,在这两个集合中,每个类的图像拆分为 50/50。无论我使用哪种模型架构,还是使用随机或ImageNet权重初始化,验证精度始终为0.5。事实上,当我没有将图像分成50/50的二元分类时,验证准确性将反映这一点(因此,当我有更多属于一个类的图像时,验证精度将始终为0.85)。由于最后一点,我怀疑问题不在于模型或权重优化,而在于我对ImageDataGenerator类的实例化 - 尽管这只是现阶段的一种有教养的预感。我已经在下面包含了我的代码,任何人都可以找到任何明显的错误吗?sz=224 # image width = height = 224batch_size=64train_data_dir = r"./crack_dataset/train"validation_data_dir = r"./crack_dataset/validate"nb_train_samples = 3416nb_val_samples = 612train_datagen = ImageDataGenerator(rescale=1./255)validation_datagen = ImageDataGenerator(rescale=1./255)train_generator = train_datagen.flow_from_directory(train_data_dir,                                                    target_size = (sz, sz),                                                    batch_size=batch_size,                                                    class_mode='binary')validation_generator = validation_datagen.flow_from_directory(validation_data_dir,                                                              target_size = (sz, sz),                                                              batch_size=batch_size,                                                              class_mode='binary')# Create Model model = Sequential()model.add(Conv2D(filters=96, input_shape=input_shape, kernel_size=(11,11), strides=(4,4), padding='valid', activation='relu'))model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))model.add(Conv2D(filters=256, kernel_size=(11,11), strides=(1,1), padding='valid', activation='relu'))
查看完整描述

2 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

问题是优化器的学习速度,值太大了。如注释中所示,应将其设置为接近 0 的低值。

您可以在下图中看到学习速率如何影响分类准确性:

//img1.sycdn.imooc.com//62e8dc510001f0cb11610848.jpg

查看完整回答
反对 回复 2022-08-02
?
BIG阳

TA贡献1859条经验 获得超6个赞

这是一个评论,但太长了,所以我切换到一个正确的答案。

我还没有尝试过你的CNN,但我会修改你的图层。我不是设计CNN架构的专家,但我不认为连续有2层具有相同参数(第5层和第6层)的意义,这对我迄今为止所学到的东西来说毫无用处。尝试使用一些简单的体系结构,并从那里“纵向扩展”(就体系结构的复杂性而言)。

此外,在“单位数量”(第1,第3,第5,第6,第7层,Conv2D)方面上下可能不是最好的策略,每次你上升时,你都会根据要获得的特征进行概括,因为你从更少的特征开始,你要求你的网络从较小的集合创建特征。在某些情况下,它可能很有用,但我不认为这是其中之一。

对于重新缩放,您不需要调用“ImageDataGenerator”,您可以通过以下方式获得相同的结果:

train_datagen = train_datagen/255.0

尽可能简化。


查看完整回答
反对 回复 2022-08-02
  • 2 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信