【问题标题】:Error with Xception Transfer Learning ModelXception 迁移学习模型出错
【发布时间】:2021-02-23 11:07:33
【问题描述】:

我的数据集有 2 个文件夹 Test 和 Train,Test 包含 2 个文件夹,其中包含 Covid X 射线和 Normal X 射线,Train 文件夹也是如此。在训练的最后一个时期,我在 val_set 上获得了 99.4% 的准确度,但是在绘制混淆矩阵时,我什至没有得到 60% 的准确度。卡住了,请帮忙!而且我的 Y_pred 看起来很奇怪,而不是介于 0-1 之间的确定性,我需要帮助才能在我的混淆矩阵和分类报告中获得相同的 99.4% 的结果。

import os
import numpy as np
import matplotlib.pyplot as plt
import keras
from keras.applications import xception
from keras.layers import *
from keras.models import *
from keras.preprocessing import image

model = xception.Xception(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
for layers in model.layers:
    layers.trainable=False
    
flat1 = Flatten()(model.layers[-1].output)
class1 = Dense(256, activation='relu')(flat1)
output = Dense(1, activation='sigmoid')(class1)

model = Model(inputs = model.inputs, outputs = output)


model.compile(loss = 'binary_crossentropy', optimizer='adam', metrics=['accuracy'])


train_datagen = image.ImageDataGenerator(
    rescale = 1./255,
    shear_range = 0.2,
    zoom_range = 0.2,
    horizontal_flip = True,
    )

test_datagen = image.ImageDataGenerator(rescale = 1./255)

train_generator = train_datagen.flow_from_directory(
    '/Users/xd_anshul/Desktop/Research/Major/CovidDataset/Train',
    target_size = (224,224),
    batch_size = 10,
    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
    '/Users/xd_anshul/Desktop/Research/Major/CovidDataset/Test',
    target_size = (224,224),
    batch_size = 10,
    class_mode='binary')

#model Fitting

hist = model.fit(
    train_generator,
    epochs=2,
    validation_data=validation_generator)



from sklearn.metrics import classification_report, confusion_matrix

Y_pred = model.predict_generator(validation_generator, steps = np.ceil(validation_generator.samples / validation_generator.batch_size), verbose=1, workers=0)
y_pred = [np.where(predictions>0.5, 1, 0) for predictions in Y_pred]
print('Confusion Matrix')
print(confusion_matrix(validation_generator.classes, y_pred))
print('Classification Report')
target_names = ['Covid', 'Normal']
print(classification_report(validation_generator.classes, y_pred, target_names=target_names))

OUTPUT::

Epoch 1/2
255/255 [==============================] - 464s 2s/step - loss: 1.4076 - accuracy: 0.9342 - val_loss: 0.3753 - val_accuracy: 0.9718
Epoch 2/2
255/255 [==============================] - 558s 2s/step - loss: 0.1218 - accuracy: 0.9885 - val_loss: 0.0181 - val_accuracy: 0.9944
Confusion Matrix
[[310 100]
 [ 97  25]]
Classification Report
              precision    recall  f1-score   support

       Covid       0.76      0.76      0.76       410
      Normal       0.20      0.20      0.20       122

    accuracy                           0.63       532
   macro avg       0.48      0.48      0.48       532
weighted avg       0.63      0.63      0.63       532

Y_pred looks like:

1.05698e-14
2.25061e-13
3.96925e-19
5.53114e-17
3.4461e-32
1.2413e-32
2.29092e-28
4.01138e-17
3.81177e-23
1.88817e-07
1.164e-07
.
.
.
(532 Values)

【问题讨论】:

    标签: tensorflow keras deep-learning conv-neural-network transfer-learning


    【解决方案1】:

    代码后

    output = Dense(1, activation='sigmoid')(class1)
    

    输入这段代码

    model=Model(inputs=model.input, outputs=output)
    

    在您的验证生成器中,您没有指定目标大小,所以添加

    target_size=(224,224)
    

    另请注意,您的 train_generator 中的批量大小为 10。在 model.fit 你有 steps_per_epoch=9。这意味着您每个时期只使用 90 个训练图像。 你有多少训练图像?此外,您没有为验证生成器指定 batch_size,因此它默认为 32。您在 model.fit 中将验证步骤设置为 2,因此每个 epoch 将通过 64 个验证图像。您有多少张验证图片?

    【讨论】:

    • 非常感谢,我有大约 5000 张训练图像和 500 张验证图像,批量大小和步骤应该是多少?另外,我有一台 Mac Air,它真的很慢,你能帮我解决一下吗?
    • 批量大小通常受可用内存限制。尝试 32 作为初学者。然后步骤通常是samples//batch_size。在 model.fit 中,您可以将它们保留为 None ,它将在内部确定步骤。加入 Kaggle 或 Google Colab。您可以免费在线使用他们的 GPU。
    • 嗨,Gerry,我在上面的代码中遇到了问题,我想我在设置步骤、batch_size 和其他超参数时遇到了问题。我在 Val_set 上获得了 95% 的准确率,但是在绘制混淆矩阵时,在 532 个测试图像中,只有 410 个在训练模型后正确预测,你能帮帮我吗?提前感谢您!
    • 所以我假设您正在使用经过训练的模型对验证集进行预测,对吗?请展示如何进行预测以及创建混淆矩阵的方式的代码。如果您在验证集上进行预测,您应该获得与在最后一个训练时期的验证集上获得的准确度相同的准确度。尝试在验证集上运行 model.evaluate。
    • 嗨,Gerry 请查看带有已编辑代码的更新问题,我在混淆矩阵上得到了非常糟糕的结果,但是在最后一个 epoch 上训练 val_set 的准确率达到 99.44%。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2021-01-17
    • 2022-11-27
    • 2021-05-29
    • 2022-07-14
    • 2021-06-03
    • 2018-08-04
    相关资源
    最近更新 更多