我的目标是将我的顶层附加到像VGG19这样的预训练模型,并使用合并模型进行一些预测。合并后的模型准确度为0。需要一些帮助。
<div class='loader'></div>
在这里重新加载这些重量 代码未显示
from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D
from keras.layers import Dropout, Flatten, Dense
from keras.models import Sequential
vgg19top_model = Sequential()
vgg19top_model.add(GlobalAveragePooling2D(input_shape=train_vgg19.shape[1:])) # shape=(7, 7, 512)
vgg19top_model.add(Dense(255, activation='relu'))
vgg19top_model.add(Dropout(0.35))
vgg19top_model.add(Dense(133, activation='softmax'))
vgg19top_model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
global_average_pooling2d_1 ( (None, 512) 0
_________________________________________________________________
dense_1 (Dense) (None, 255) 130815
_________________________________________________________________
dropout_1 (Dropout) (None, 255) 0
_________________________________________________________________
dense_2 (Dense) (None, 133) 34048
=================================================================
Total params: 164,863
Trainable params: 164,863
Non-trainable params: 0
from keras import applications
vgg19=applications.vgg19.VGG19(include_top=False, weights='imagenet',input_shape=(224, 224, 3))
vgg19.summary()
Layer (type) Output Shape Param #
=================================================================
input_3 (InputLayer) (None, 224, 224, 3) 0
_________________________________________________________________
...
...
_________________________________________________________________
block5_conv4 (Conv2D) (None, 14, 14, 512) 2359808
_________________________________________________________________
block5_pool (MaxPooling2D) (None, 7, 7, 512) 0
=================================================================
Total params: 20,024,384
Trainable params: 20,024,384
Non-trainable params: 0
它完全失败,准确率为0%
如何从头到尾测试这个新模型 - 或者更确切地说为什么它的预测如此糟糕?
答案 0 :(得分:1)
我认为,从你的做法来看,你正在堆叠两个 VGG19 模型,但第一个只是 VGG19 的一些层。
这不是提高准确性的最佳方法。首先,它只会增加网络的参数,因为您按顺序组合模型,计算量会很大。其次,它不会提高准确率,因为第一个模型会同时提取低层和高层的特征,但是接下来的 CNN 层从第二个模型中提取了更多无关紧要的复杂特征。
您可能想尝试另一种方法,例如 Siamese CNN 或双向 CNN (BCNN)。这个想法是我们将训练集提供给两个 CNN 模型,然后我们合并这两个 CNN 的输出。证明该方法可以提取输入图像的特征变量。
您可以访问此网站以获取有关 BCNN 的更多信息 http://vis-www.cs.umass.edu/bcnn/