如何使用python+pandas+tensorflow實現(xiàn)Covid新冠病毒檢測
介紹
Covid 是一種致命的疾病,會影響呼吸系統(tǒng)。檢測一個人是否患有新冠病毒非常重要。在本博客中,我們將確定一個人是否患有新冠肺炎。
輸入
讓我們導入執(zhí)行任務所需的工具。
import pandas as pd
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.a(chǎn)pplications import ResNet50
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Flatten, GlobalAveragePooling2D
from tensorflow.keras.a(chǎn)pplications import ResNet50
import tensorflow as tf
import matplotlib.pyplot as plt
讀取數(shù)據(jù)
train_data=pd.read_csv("Training_set_covid.csv")
print(train_data)
由于我們只有圖像文件的名稱和它們的標簽,讓我們添加一個由它們的文件路徑組成的列。我們可以使用 ImageDataGenerator 加載圖像。train_data["filepath"]="train/"+train_data["filename"]
print(train_data)
我已經(jīng)用“file-path”替換了實際的文件路徑。
數(shù)據(jù)增強由于我們的數(shù)據(jù)很少,我正在擴充我的數(shù)據(jù)并創(chuàng)建一個變量來存儲訓練和驗證圖像train_datagen=ImageDataGenerator(validation_split=0.2,zoom_range=0.2,rescale=1./255.,horizontal_flip=True)
在這里,我們將縮放范圍設置為 0.2,并將圖像重新縮放為 1/255 大小,并制作了訓練圖像的 20% 的驗證集。train_data["label"]=train_data["label"].a(chǎn)stype(str)
上面的代碼會將我們的 int 標簽轉(zhuǎn)換為字符串類型。
加載圖像
train_images=train_datagen.flow_from_dataframe(train_data,x_col="filepath",batch_size=8,target_size=(255,255),class_mode="binary",shuffle=True,subset='training',y_col="label")
valid_images=train_datagen.flow_from_dataframe(train_data,x_col="filepath",batch_size=8,target_size=(255,255),class_mode="binary",shuffle=True,subset='validation',y_col="label")
在這里,我們創(chuàng)建了 2 個數(shù)據(jù)流、1 個訓練集和另一個驗證集。為此我們設置了一些參數(shù)。參數(shù)如:Batch Size –> 8Target Size (Image size) –> (255,255)Shuffle –> TrueClass Mode –> Binary由于我們只有 2 個目標屬性,因此我們設置了類模式 Binary。Resnet50 將 (255,255) 作為輸入形狀,因此我們的圖像大小為 (255,255)。Shuffle 設置為 True,以足夠好地對圖像進行打亂,以便兩個集合都有不同的圖像。RESNET50讓我們加載我們的 ResNet50 模型。但在進入代碼路徑之前,請了解 ResNet50 是什么以及它是如何工作的。base_model = ResNet50(input_shape=(225, 225,3), include_top=False, weights="imagenet")
for layer in base_model.layers:
layer.trainable = False
base_model = Sequential()
base_model.a(chǎn)dd(ResNet50(include_top=False, weights='imagenet', pooling='max'))
base_model.a(chǎn)dd(Dense(1, activation='sigmoid'))
base_model.compile(optimizer = tf.keras.optimizers.SGD(lr=0.0001), loss = 'binary_crossentropy', metrics = ['acc'])
base_model.summary()
讓我們理解這個代碼塊。首先,我們將使用我們的輸入形狀和權重加載一個基本模型。在這里,我們使用了image-net權重。我們已經(jīng)移除了頂部,因為我們將添加我們的輸出層。然后,我們將所有基礎模型層設置為不可訓練,因為我們不想覆蓋加載時導入的權重,F(xiàn)在,我們正在創(chuàng)建我們的基礎模型,我們添加一個 50 個單元的 Dense 層來創(chuàng)建一個全連接層,該層連接到我們的輸出密集層,具有 1 個單元和 Sigmoid 作為激活函數(shù)。然后我們用 SGD 優(yōu)化器和一些微調(diào)和二進制交叉熵作為損失函數(shù)編譯它。這是我們的模型的外觀:Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
resnet50 (Functional) (None, 2048) 23587712
_________________________________________________________________
dense_1 (Dense) (None, 1) 2049
=================================================================
Total params: 23,589,761
Trainable params: 23,536,641
Non-trainable params: 53,120
_________________________________________________________________
訓練resnet_history = base_model.fit(train_images, validation_data = valid_images, steps_per_epoch =int(train_images.n/8), epochs = 20)
讓我們用驗證集訓練我們的模型,訓練圖像并驗證它們。有 20 個 epoch,每個 epoch 的步數(shù)設置為訓練樣本數(shù)/8 以進行平衡,批量大小為 8。Epoch 1/20
348/348 [==============================] - 162s 453ms/step - loss: 0.7703 - acc: 0.8588 - val_loss: 1.2608 - val_acc: 0.8791
Epoch 2/20
348/348 [==============================] - 84s 242ms/step - loss: 0.3550 - acc: 0.9198 - val_loss: 2.8488 - val_acc: 0.4518
Epoch 3/20
348/348 [==============================] - 84s 241ms/step - loss: 0.3501 - acc: 0.9229 - val_loss: 1.0196 - val_acc: 0.7007
Epoch 4/20
348/348 [==============================] - 84s 241ms/step - loss: 0.3151 - acc: 0.9207 - val_loss: 0.5498 - val_acc: 0.8633
Epoch 5/20
348/348 [==============================] - 85s 245ms/step - loss: 0.2376 - acc: 0.9281 - val_loss: 0.4247 - val_acc: 0.9094
Epoch 6/20
348/348 [==============================] - 86s 246ms/step - loss: 0.2273 - acc: 0.9248 - val_loss: 0.3911 - val_acc: 0.8978
Epoch 7/20
348/348 [==============================] - 86s 248ms/step - loss: 0.2166 - acc: 0.9319 - val_loss: 0.2936 - val_acc: 0.9295
Epoch 8/20
348/348 [==============================] - 87s 251ms/step - loss: 0.2016 - acc: 0.9389 - val_loss: 0.3025 - val_acc: 0.9281
Epoch 9/20
348/348 [==============================] - 87s 249ms/step - loss: 0.1557 - acc: 0.9516 - val_loss: 0.2762 - val_acc: 0.9281
Epoch 10/20
348/348 [==============================] - 85s 243ms/step - loss: 0.1802 - acc: 0.9418 - val_loss: 0.3382 - val_acc: 0.9353
Epoch 11/20
348/348 [==============================] - 84s 242ms/step - loss: 0.1430 - acc: 0.9586 - val_loss: 0.3222 - val_acc: 0.9324
Epoch 12/20
348/348 [==============================] - 85s 243ms/step - loss: 0.0977 - acc: 0.9695 - val_loss: 0.2110 - val_acc: 0.9410
Epoch 13/20
348/348 [==============================] - 85s 245ms/step - loss: 0.1227 - acc: 0.9572 - val_loss: 0.2738 - val_acc: 0.9281
Epoch 14/20
348/348 [==============================] - 86s 246ms/step - loss: 0.1396 - acc: 0.9558 - val_loss: 0.2508 - val_acc: 0.9439
Epoch 15/20
348/348 [==============================] - 86s 247ms/step - loss: 0.1173 - acc: 0.9578 - val_loss: 0.2025 - val_acc: 0.9381
Epoch 16/20
348/348 [==============================] - 86s 246ms/step - loss: 0.1038 - acc: 0.9604 - val_loss: 0.2658 - val_acc: 0.9439
Epoch 17/20
348/348 [==============================] - 86s 247ms/step - loss: 0.0881 - acc: 0.9707 - val_loss: 0.2997 - val_acc: 0.9309
Epoch 18/20
348/348 [==============================] - 87s 249ms/step - loss: 0.1036 - acc: 0.9627 - val_loss: 0.2527 - val_acc: 0.9367
Epoch 19/20
348/348 [==============================] - 87s 251ms/step - loss: 0.0848 - acc: 0.9736 - val_loss: 0.2461 - val_acc: 0.9439
Epoch 20/20
348/348 [==============================] - 87s 250ms/step - loss: 0.0742 - acc: 0.9736 - val_loss: 0.2483 - val_acc: 0.9439
我們有很好的結果。讓我們看看它的圖表。性能圖精度圖plt.plot(resnet_history.history["acc"],label="train")
plt.plot(resnet_history.history["val_acc"],label="val")
plt.title("Training Accuracy and Validation Accuracy")
plt.legend()
我們有很好的訓練和驗證準確性。損失plt.plot(resnet_history.history["loss"],label="train")
plt.plot(resnet_history.history["val_loss"],label="val")
plt.title("Training Loss and Validation Loss")
plt.legend()
而且損失少。結論即使如此少的數(shù)據(jù),ResNet50 也給出了令人滿意的結果。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
10月31日立即下載>> 【限時免費下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月28日立即報名>>> 2024工程師系列—工業(yè)電子技術在線會議
-
12月19日立即報名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報名中>> OFweek2024中國智造CIO在線峰會
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍皮書》
推薦專題
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結構工程師 廣東省/深圳市