首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度学习分类CIFAR-10验证精度低

深度学习分类CIFAR-10验证精度低
EN

Stack Overflow用户
提问于 2022-05-19 11:34:04
回答 1查看 77关注 0票数 0

经过5次测试,我的验证分数约为0.07,我无法理解我做错了什么。我正在努力学习生成的图像分类器。

In1

代码语言:javascript
复制
from tensorflow.keras.datasets import cifar10

In2

代码语言:javascript
复制
(features_train, label_train), (features_test, label_test) = cifar10.load_data()

In3

代码语言:javascript
复制
features_train.shape

In4

代码语言:javascript
复制
features_test.shape

In5

代码语言:javascript
复制
batch_size = 16
img_height = 32
img_width = 32

In6

代码语言:javascript
复制
from tensorflow.keras.preprocessing.image import ImageDataGenerator

In7

代码语言:javascript
复制
train_img_gen = ImageDataGenerator(rescale=1./255,
                                  width_shift_range = 0.1,
                                  height_shift_range = 0.1,
                                  horizontal_flip = True)

In8

代码语言:javascript
复制
val_img_gen = ImageDataGenerator(rescale = 1./255)

In9

代码语言:javascript
复制
train_data_gen = train_img_gen.flow(features_train, label_train, batch_size = batch_size)

In10

代码语言:javascript
复制
val_data_gen = train_img_gen.flow(features_test, label_test, batch_size = batch_size)

In11

代码语言:javascript
复制
train_data_gen

In12

代码语言:javascript
复制
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers

In13

代码语言:javascript
复制
np.random.seed(8)
tf.random.set_seed(8)

In14

代码语言:javascript
复制
model = tf.keras.Sequential([layers.Conv2D(64, 3, activation = 'relu', input_shape = (img_height, img_width, 3)),
                            layers.MaxPooling2D(),
                            layers.Conv2D(128, 3, activation='relu'),
                            layers.MaxPooling2D(),
                            layers.Flatten(),
                            layers.Dense(128, activation='relu'),
                            layers.Dense(10, activation='softmax')])

In15

代码语言:javascript
复制
optimizer = tf.keras.optimizers.Adam(0.001)

In16

代码语言:javascript
复制
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

In17

代码语言:javascript
复制
model.summary()

In18

代码语言:javascript
复制
model.fit(train_data_gen, 
          steps_per_epoch=len(features_train)//batch_size, 
          epochs=5, 
          validation_data=val_data_gen,
         validation_steps=len(features_test)//batch_size)
EN

回答 1

Stack Overflow用户

发布于 2022-05-19 11:52:51

标准的“精度”度量不应该工作,因为模型的输出是一个热编码,但是您的标签是整数编码的。因此,在编译模型时尝试使用sparse_categorical_accuracy,如下所示:

代码语言:javascript
复制
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer, metrics=['sparse_categorical_accuracy'])

而且,为了达到更好的表现,训练更多的时代会更好。例如,100个时代:

代码语言:javascript
复制
model.fit(train_data_gen, 
          steps_per_epoch=len(features_train)//batch_size, 
          epochs=100, 
          validation_data=val_data_gen,
         validation_steps=len(features_test)//batch_size)

另一件事是,Conv2D层的过滤器数量似乎太大,不适合这样的直进图像分类任务。如果你使用更多的卷积层,也会比使用更多的滤波器更好。同样,这可能会导致模型过度适应,所以最后尝试使用Dropout层来解决这个问题。如下所示:

代码语言:javascript
复制
model = tf.keras.Sequential([
    layers.Conv2D(32, 3, activation = 'relu', input_shape = (img_height, img_width, 3)),
    layers.Conv2D(32, 3, activation='relu'),
    layers.MaxPooling2D(),
    layers.Conv2D(64, 3, activation='relu'),
    layers.Conv2D(64, 3, activation='relu'),
    layers.MaxPooling2D(),
    layers.Flatten(),
    layers.Dropout(0.25),
    layers.Dense(128, activation='relu'),
    layers.Dense(10, activation='softmax')])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72303813

复制
相关文章

相似问题

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