Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras预训练VGG16低精度_Python_Keras_Deep Learning_Conv Neural Network_Vgg Net - Fatal编程技术网

Python Keras预训练VGG16低精度

Python Keras预训练VGG16低精度,python,keras,deep-learning,conv-neural-network,vgg-net,Python,Keras,Deep Learning,Conv Neural Network,Vgg Net,我试图创建一个非常简单的CNN程序,使用VGG16预训练模型进行分类。我的数据集是在Kaggle上发现的第一代口袋妖怪,它有149个不同类别的10000张图片。 问题是我没有得到足够的准确度,我能得到的最大值几乎是40% 代码如下: 将tensorflow导入为tf 将numpy作为np导入 vgg_model=tf.keras.applications.VGG16(weights='imagenet',include_top=False,input_shape=(224224,3)) vgg_

我试图创建一个非常简单的CNN程序,使用VGG16预训练模型进行分类。我的数据集是在Kaggle上发现的第一代口袋妖怪,它有149个不同类别的10000张图片。 问题是我没有得到足够的准确度,我能得到的最大值几乎是40%

代码如下:

将tensorflow导入为tf
将numpy作为np导入
vgg_model=tf.keras.applications.VGG16(weights='imagenet',include_top=False,input_shape=(224224,3))
vgg_model.trainable=错误
model=tf.keras.models.Sequential()
model.add(vgg_模型)
model.add(tf.keras.layers.flatte(input\u shape=vgg\u model.output\u shape[1:]))
model.add(tf.keras.layers.Dense(256,activation='relu'))
添加(tf.keras.layers.density(149,activation='softmax'))
compile(优化器='adam',loss='classifical_crossentropy',metrics=['accurity'])
train=tf.keras.preprocessing.image.ImageDataGenerator(重缩放=1./255,剪切范围=0.2,缩放范围=0.2,水平翻转=True)
test=tf.keras.preprocessing.image.ImageDataGenerator(重缩放=1./255)
training\u set=train.flow\u from\u目录('dataset/generation/train',target\u size=(224224),class\u mode='category')
val_set=train.flow_from_目录('dataset/generation/test',target_size=(224224),class_mode='category')
历史=模型.fit\u生成器(训练集,每个历元的步骤=64,历元=30,验证数据=val\u集,验证步骤=64)
以下是输出:

Epoch 1/30
64/64 [=================] - 57s 885ms/step - loss: 5.0538 - acc: 0.0410 - val_loss: 4.7750 - val_acc: 0.0659
Epoch 2/30
64/64 [=================] - 50s 775ms/step - loss: 4.7432 - acc: 0.0747 - val_loss: 4.5880 - val_acc: 0.1037
...
Epoch 10/30
64/64 [=================] - 50s 788ms/step - loss: 3.0594 - acc: 0.3077 - val_loss: 3,3569 - val_acc: 0.2425
...
Epoch 20/30
64/64 [=================] - 54s 843ms/step - loss: 2.2030 - acc: 0.4628 - val_loss: 2.8968 - val_acc: 0.3565
...
Epoch 25/30
64/64 [=================] - 49s 773ms/step - loss: 1.9324 - acc: 0.5293 - val_loss: 2.6801 - val_acc: 0.3823
...
Epoch 30/30
64/64 [=================] - 52s 814ms/step - loss: 1.6427 - acc: 0.5801 - val_loss: 2.6852 - val_acc: 0.3936

有人能帮我理解吗?

这可能会提高您的验证准确性:

# Add a fully connected layer with 512 hidden units and ReLU activation
x = keras.layers.Dense(512, activation='relu')(x)

Vgg-16和其他预先训练的模型在ImageNet数据集上进行训练,这与您当前的数据集非常不同。您的模型使用预先训练的权重,在完全连接的层上训练,然后给出输出。我想你应该在使用你设置的学习率的完全连接层之前尝试训练几层?Zrufy,我尝试使用SCD optimizer和0.0001的学习率,但情况更糟。所以我用的是标准的亚当
# Add a dropout rate of 0.5
x = keras.layers.Dropout(0.5)(x)