经过5次测试,我的验证分数约为0.07,我无法理解我做错了什么。我正在努力学习生成的图像分类器。
In1
from tensorflow.keras.datasets import cifar10In2
(features_train, label_train), (features_test, label_test) = cifar10.load_data()In3
features_train.shapeIn4
features_test.shapeIn5
batch_size = 16
img_height = 32
img_width = 32In6
from tensorflow.keras.preprocessing.image import ImageDataGeneratorIn7
train_img_gen = ImageDataGenerator(rescale=1./255,
width_shift_range = 0.1,
height_shift_range = 0.1,
horizontal_flip = True)In8
val_img_gen = ImageDataGenerator(rescale = 1./255)In9
train_data_gen = train_img_gen.flow(features_train, label_train, batch_size = batch_size)In10
val_data_gen = train_img_gen.flow(features_test, label_test, batch_size = batch_size)In11
train_data_genIn12
import numpy as np
import tensorflow as tf
from tensorflow.keras import layersIn13
np.random.seed(8)
tf.random.set_seed(8)In14
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
optimizer = tf.keras.optimizers.Adam(0.001)In16
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])In17
model.summary()In18
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)发布于 2022-05-19 11:52:51
标准的“精度”度量不应该工作,因为模型的输出是一个热编码,但是您的标签是整数编码的。因此,在编译模型时尝试使用sparse_categorical_accuracy,如下所示:
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizer, metrics=['sparse_categorical_accuracy'])而且,为了达到更好的表现,训练更多的时代会更好。例如,100个时代:
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层来解决这个问题。如下所示:
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')])https://stackoverflow.com/questions/72303813
复制相似问题