我想重新训练Google的初始版本v3以解决我自己的Keras和imagenet权重问题 . 问题是,当你加载初始v3 imagenet 权重时,你必须指定类的数量是1000,如下所示:

base_network=inception_v3.InceptionV3(include_top=False, weights='imagenet',classes=1000)

如果我的数据集具有的自定义类数(不是1000),则会引发错误,如果使用 imagenet 权重,则必须将强制设置 classes 设置为1000 .

为了自定义顶层的初始层,我读过你可以使用 bottleneck . 这不过是不使用标准的初始顶层并自定义它,因此,我可以使用 include_top=False 参数并编程我自己的顶层 .

如果我按如下方式这样做:

x = base_network.output
x = GlobalAveragePooling2D()(x)
x = Dense(128, activation='relu')(x)
predictions = Dense(globals_params.num_classes, activation='softmax')(x)
network = Model(inputs=base_network.input, outputs=predictions)

它工作(训练),但验证损失和准确性永远不会改变,正如你所看到的(显然,初始层设置 trainable=False 以保持 imagenet 权重) .

...
Epoch 00071: acc did not improve
Epoch 72/300
2741/2741 [==============================] - 12s 4ms/step - loss: 0.0471 - acc: 0.9810 - val_loss: 8.5221 - val_acc: 0.4643

Epoch 00072: acc did not improve
Epoch 73/300
2741/2741 [==============================] - 12s 4ms/step - loss: 0.0354 - acc: 0.9872 - val_loss: 8.4629 - val_acc: 0.4718

Epoch 00073: acc did not improve
Epoch 74/300
2741/2741 [==============================] - 12s 4ms/step - loss: 0.0277 - acc: 0.9891 - val_loss: 8.2515 - val_acc: 0.4881

Epoch 00074: acc did not improve
Epoch 75/300
2741/2741 [==============================] - 12s 4ms/step - loss: 0.0330 - acc: 0.9880 - val_loss: 8.5953 - val_acc: 0.4618

Epoch 00075: acc did not improve
Epoch 76/300
2741/2741 [==============================] - 12s 4ms/step - loss: 0.0402 - acc: 0.9854 - val_loss: 8.3820 - val_acc: 0.4793

Epoch 00076: acc did not improve
Epoch 77/300
2741/2741 [==============================] - 12s 4ms/step - loss: 0.0337 - acc: 0.9880 - val_loss: 8.1831 - val_acc: 0.4906

Epoch 00077: acc did not improve
Epoch 78/300
2741/2741 [==============================] - 12s 4ms/step - loss: 0.0381 - acc: 0.9858 - val_loss: 8.4118 - val_acc: 0.4756

...

问题是:如何为顶层编程顶层,允许我训练我自己的数据集并更改我的验证准确度?我找了互联网上的每个网站,但我找不到任何东西 .

提前致谢!