首页 > 解决方案 > 当我用 tensorflow 2.0 训练 VGG 时,为什么我的准确率没有提高,只保持在 25% 左右

问题描述

def get_model():
    gmodel=Sequential([

        Conv2D(64, (3, 3), activation='relu', input_shape=(256,256,3)),
        Conv2D(64,(3,3),activation='relu'),
        MaxPooling2D((1,1),strides=2,padding='same'),
        Conv2D(128, (3, 3), activation='relu'),
        Conv2D(128, (3, 3), activation='relu'),
        MaxPooling2D((1,1), strides=2, padding='same'),
        Conv2D(256, (3, 3), activation='relu'),
        Conv2D(256, (3, 3), activation='relu'),
        MaxPooling2D((1,1), strides=2, padding='same'),
        Conv2D(512, (3, 3), activation='relu'),
        Conv2D(512, (3, 3), activation='relu'),
        MaxPooling2D((1,1), strides=2, padding='same'),
        Conv2D(512, (3, 3), activation='relu'),
        Conv2D(512, (3, 3), activation='relu'),
        MaxPooling2D((1,1), strides=2, padding='same'),
        Flatten(),
        Dense(4, activation='softmax')

])


    return gmodel
model=get_model()
model.compile(
optimizer=tf.keras.optimizers.Adam(0.0001),
loss="sparse_categorical_crossentropy",
metrics=['accuracy']
)
history=model.fit(train,epochs=5)

我想使用 VGG 模型将图片分类为 4 类,但准确率始终在 25% 左右。我检查了图片和标签,它们都是正确的,我也尝试了其他一些模型和优化器,但准确性也没有太大的提高。我应该怎么办。我的 GPU 是 2070,tensorflow 是 2.0,python 是 3.6

标签: machine-learningdeep-learningcomputer-visiontensorflow2.0vgg-net

解决方案


池化层

MaxPooling2D((1,1),strides=2,padding='same')

导致信息丢失。池化窗口小于步幅。这基本上是通过丢弃每个备用像素上的信息来工作的。所以,这可能是模型没有学习的原因。只需将池化层更改为:

MaxPooling2D((2, 2), strides=2, padding='SAME')

可以解决这个问题。


推荐阅读