Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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 如何改进我的CNN';什么是精确进化?_Python_Tensorflow_Keras - Fatal编程技术网

Python 如何改进我的CNN';什么是精确进化?

Python 如何改进我的CNN';什么是精确进化?,python,tensorflow,keras,Python,Tensorflow,Keras,所以,我试图创建一个CNN,它可以预测x射线胸部图像中是否有任何“支持设备”,但当训练我的模型时,它似乎没有学到任何东西 我正在使用一个名为“CheXpert”的数据集,它有超过20万张图像可供使用。在做了一些“清理”之后,最终的数据集最终得到了10万张图像。 就模型而言,我导入了vgg16预训练模型的卷积基,并添加了我自己的2个完全连接的层。然后,我冻结了所有的卷积基,只对完全连接的层进行训练。代码如下: from keras.layers import GlobalAveragePoolin

所以,我试图创建一个CNN,它可以预测x射线胸部图像中是否有任何“支持设备”,但当训练我的模型时,它似乎没有学到任何东西

我正在使用一个名为“CheXpert”的数据集,它有超过20万张图像可供使用。在做了一些“清理”之后,最终的数据集最终得到了10万张图像。 就模型而言,我导入了vgg16预训练模型的卷积基,并添加了我自己的2个完全连接的层。然后,我冻结了所有的卷积基,只对完全连接的层进行训练。代码如下:

from keras.layers import GlobalAveragePooling2D
from keras.models import Model

pretrained_model = VGG16(weights='imagenet', include_top=False)

pretrained_model.summary()

for layer in pretrained_model.layers:
    layer.trainable = False

x = pretrained_model.output
x = GlobalAveragePooling2D()(x)

dropout = Dropout(0.25)

# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
x = dropout(x)
x = Dense(1024, activation = 'relu')(x)
predictions = Dense(1, activation='sigmoid')(x)

final_model = Model(inputs=pretrained_model.input, outputs=predictions)

final_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
据我所知,正常的行为应该是准确度从低开始,然后随着时代的发展而增长。但在这里,它只在相同的值(0.93和0.95)内振荡。很抱歉,我无法上传图像来向您显示图表

总而言之,我想知道精度的微小差异是否意味着模型没有学到任何东西


我有一个假设:从数据集的所有100000张图像中,95000张有标签“1”,只有5000张有标签“0”。我认为,如果用“1”减少图像,将其与用“0”等同,结果就会改变。

没有标记为“0”的图像肯定对CNN没有帮助。我还建议降低学习率,调整批量大小,看看是否有变化。
我希望它能有所帮助。

由于训练数据不平衡,我建议您可以在训练步骤中设置“class\u weight”。你拥有的数据越多,你设定的等级权重就越低

class_weight = {0: 1.5, 1: 0.5}
model.fit(X, Y, class_weight=class_weight)
您可以在中检查类_重量的增加

class_weight:可选的字典映射类索引(整数)到 权重(浮动)值,用于对损失函数进行加权(在 仅限培训)。这有助于告诉模型“多付些钱” 注意“来自代表性不足的班级的样本”


不确定,但基于上述情况——可能只是做这类事情的一个好框架:??您可以手动设置rmsprop优化器的学习率,以最终提高准确性。选中此处(对于rmsprop,默认lr为0.001)