首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的acc总是更高,但我的val_acc却很小?

为什么我的acc总是更高,但我的val_acc却很小?
EN

Stack Overflow用户
提问于 2019-08-24 06:29:18
回答 1查看 198关注 0票数 0

我试着训练14000个训练数据集和3500个验证数据集,但是为什么每次我训练的时候我总是得到高精度的结果,而验证部分很小。

那么,如果我希望验证的结果接近训练的准确性,并为每一个时代提供重要的补充,我应该做什么?

一定要加减吗?抱歉英语不太好

代码语言:javascript
复制
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense

classifier = Sequential()


classifier.add(Conv2D(16, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
`classifier.add(MaxPooling2D(pool_size = (2, 2)))


classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))`


classifier.add(Conv2D(64, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))

classifier.add(Flatten())

classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

from keras.callbacks import TensorBoard
# Use TensorBoard
callbacks = TensorBoard(log_dir='./Graph')

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('dataset/training_set',
                                                 target_size = (64, 64),
                                                 batch_size = 32,
                                                 class_mode = 'binary')

test_set = test_datagen.flow_from_directory('dataset/test_set',
                                            target_size = (64, 64),
                                            batch_size = 32,
                                            class_mode = 'binary')

classifier.fit_generator(training_set,
                         steps_per_epoch = 100,
                         epochs = 200,
                         validation_data = test_set,
                         validation_steps = 200)

classifier.save('model.h5')

我得到了这个结果(对不起,我不知道怎么把图像放进去)

Epoch 198/200 100/100 ============================== -114 s 1s/步进损失: 0.1032 - acc: 0.9619 - val_loss: 1.1953 - val_acc: 0.7160

Epoch 199/200 100/100 ============================== -115 s 1s/步进损失: 0.1107 - acc: 0.9591 - val_loss: 1.4148 - val_acc: 0.6702

0.1229 /200 100/100 ============================== -112 s/步进损失:0.1229- acc: 0.9528 - val_loss: 1.2995 - val_acc: 0.6928

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-24 06:44:59

当你的训练精度很高,但你的验证精度很低时,你就有了超装你的模型。简单地说,您的模型已经了解了您的培训数据的结构,但无法进行泛化。为了减少过度适应,你可以试着

  • 简化你的模型,
  • 辍学引入一些层,
  • 使用更大的训练批次。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57635645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档