Python 验证准确度(val_acc)不会随时代而变化
val_acc的值不会随年代而变化 总结:Python 验证准确度(val_acc)不会随时代而变化,python,machine-learning,keras,conv-neural-network,vgg-net,Python,Machine Learning,Keras,Conv Neural Network,Vgg Net,val_acc的值不会随年代而变化 总结: 我使用的是来自Keras的预培训(ImageNet)VGG16 from keras.applications import VGG16 conv_base = VGG16(weights='imagenet', include_top=True, input_shape=(224, 224, 3)) 来自ISBI 2016(ISIC)的数据库-这是一组900张用于二元分类(恶性或良性)的皮肤损伤图像,用于培训和验证,再加上379张用于测试的图像
- 我使用的是来自Keras的预培训(ImageNet)VGG16
from keras.applications import VGG16 conv_base = VGG16(weights='imagenet', include_top=True, input_shape=(224, 224, 3))
- 来自ISBI 2016(ISIC)的数据库-这是一组900张用于二元分类(恶性或良性)的皮肤损伤图像,用于培训和验证,再加上379张用于测试的图像
- 我使用VGG16的顶层密集层,除了最后一层(分类超过1000个类),并使用带sigmoid函数激活的二进制输出
conv_base.layers.pop() # Remove last one conv_base.trainable = False model = models.Sequential() model.add(conv_base) model.add(layers.Dense(1, activation='sigmoid'))
- 解锁密集层,将其设置为可训练层
- 获取“训练数据”文件夹中两个不同文件夹中的数据,一个名为“恶性”,另一个名为“良性”
- 然后我用100多个历元和较低的学习率对其进行微调,将最后一个卷积层设置为可训练
model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
0.001、0.0001、2e-5
)结果如下所示:
Epoch 1/100
37/37 [==============================] - 33s 900ms/step - loss: 0.6394 - acc: 0.7857 - val_loss: 0.6343 - val_acc: 0.8101
Epoch 2/100
37/37 [==============================] - 30s 819ms/step - loss: 0.6342 - acc: 0.8107 - val_loss: 0.6342 - val_acc: 0.8101
Epoch 3/100
37/37 [==============================] - 30s 822ms/step - loss: 0.6324 - acc: 0.8188 - val_loss: 0.6341 - val_acc: 0.8101
Epoch 4/100
37/37 [==============================] - 31s 840ms/step - loss: 0.6346 - acc: 0.8080 - val_loss: 0.6341 - val_acc: 0.8101
Epoch 5/100
37/37 [==============================] - 31s 833ms/step - loss: 0.6395 - acc: 0.7843 - val_loss: 0.6341 - val_acc: 0.8101
Epoch 6/100
37/37 [==============================] - 31s 829ms/step - loss: 0.6334 - acc: 0.8134 - val_loss: 0.6340 - val_acc: 0.8101
Epoch 7/100
37/37 [==============================] - 31s 834ms/step - loss: 0.6334 - acc: 0.8134 - val_loss: 0.6340 - val_acc: 0.8101
Epoch 8/100
37/37 [==============================] - 31s 829ms/step - loss: 0.6342 - acc: 0.8093 - val_loss: 0.6339 - val_acc: 0.8101
Epoch 9/100
37/37 [==============================] - 31s 849ms/step - loss: 0.6330 - acc: 0.8147 - val_loss: 0.6339 - val_acc: 0.8101
Epoch 10/100
37/37 [==============================] - 30s 812ms/step - loss: 0.6332 - acc: 0.8134 - val_loss: 0.6338 - val_acc: 0.8101
Epoch 11/100
37/37 [==============================] - 31s 839ms/step - loss: 0.6338 - acc: 0.8107 - val_loss: 0.6338 - val_acc: 0.8101
Epoch 12/100
37/37 [==============================] - 30s 807ms/step - loss: 0.6334 - acc: 0.8120 - val_loss: 0.6337 - val_acc: 0.8101
Epoch 13/100
37/37 [==============================] - 32s 852ms/step - loss: 0.6334 - acc: 0.8120 - val_loss: 0.6337 - val_acc: 0.8101
Epoch 14/100
37/37 [==============================] - 31s 826ms/step - loss: 0.6330 - acc: 0.8134 - val_loss: 0.6336 - val_acc: 0.8101
Epoch 15/100
37/37 [==============================] - 32s 854ms/step - loss: 0.6335 - acc: 0.8107 - val_loss: 0.6336 - val_acc: 0.8101
并且以同样的方式进行,常数val_acc=0.8101
当我在完成培训后使用测试集时,混淆矩阵对良性病变(304)的正确率为100%,对恶性病变的正确率为0%,因此:
Confusion Matrix
[[304 0]
[ 75 0]]
我可能做错了什么
谢谢。VGG16接受了以RGB为中心的数据培训。但是,您的
ImageDataGenerator
未启用featurewise_center
,因此您正在向网络提供原始RGB数据。VGG卷积基无法处理这个问题以提供任何有意义的信息,因此您的网络最终会普遍猜测更常见的类
一般来说,当你看到这类问题时(你的网络只猜测最常见的类),这意味着你的数据有问题,而不是网络。这可能是由这样的预处理步骤造成的,也可能是由“中毒”异常训练数据的很大一部分造成的,这些异常训练数据会积极地损害训练过程
Confusion Matrix
[[304 0]
[ 75 0]]