如何使用python+pandas+tensorflow實(shí)現(xiàn)Covid新冠病毒檢測(cè)
介紹
Covid 是一種致命的疾病,會(huì)影響呼吸系統(tǒng)。檢測(cè)一個(gè)人是否患有新冠病毒非常重要。在本博客中,我們將確定一個(gè)人是否患有新冠肺炎。
輸入
讓我們導(dǎo)入執(zhí)行任務(wù)所需的工具。
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)
由于我們只有圖像文件的名稱和它們的標(biāo)簽,讓我們添加一個(gè)由它們的文件路徑組成的列。我們可以使用 ImageDataGenerator 加載圖像。train_data["filepath"]="train/"+train_data["filename"]
print(train_data)
我已經(jīng)用“file-path”替換了實(shí)際的文件路徑。
數(shù)據(jù)增強(qiáng)由于我們的數(shù)據(jù)很少,我正在擴(kuò)充我的數(shù)據(jù)并創(chuàng)建一個(gè)變量來(lái)存儲(chǔ)訓(xùn)練和驗(yàn)證圖像train_datagen=ImageDataGenerator(validation_split=0.2,zoom_range=0.2,rescale=1./255.,horizontal_flip=True)
在這里,我們將縮放范圍設(shè)置為 0.2,并將圖像重新縮放為 1/255 大小,并制作了訓(xùn)練圖像的 20% 的驗(yàn)證集。train_data["label"]=train_data["label"].a(chǎn)stype(str)
上面的代碼會(huì)將我們的 int 標(biāo)簽轉(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 個(gè)數(shù)據(jù)流、1 個(gè)訓(xùn)練集和另一個(gè)驗(yàn)證集。為此我們?cè)O(shè)置了一些參數(shù)。參數(shù)如:Batch Size –> 8Target Size (Image size) –> (255,255)Shuffle –> TrueClass Mode –> Binary由于我們只有 2 個(gè)目標(biāo)屬性,因此我們?cè)O(shè)置了類模式 Binary。Resnet50 將 (255,255) 作為輸入形狀,因此我們的圖像大小為 (255,255)。Shuffle 設(shè)置為 True,以足夠好地對(duì)圖像進(jìn)行打亂,以便兩個(gè)集合都有不同的圖像。RESNET50讓我們加載我們的 ResNet50 模型。但在進(jìn)入代碼路徑之前,請(qǐng)了解 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()
讓我們理解這個(gè)代碼塊。首先,我們將使用我們的輸入形狀和權(quán)重加載一個(gè)基本模型。在這里,我們使用了image-net權(quán)重。我們已經(jīng)移除了頂部,因?yàn)槲覀儗⑻砑游覀兊妮敵鰧。然?我們將所有基礎(chǔ)模型層設(shè)置為不可訓(xùn)練,因?yàn)槲覀儾幌敫采w加載時(shí)導(dǎo)入的權(quán)重。現(xiàn)在,我們正在創(chuàng)建我們的基礎(chǔ)模型,我們添加一個(gè) 50 個(gè)單元的 Dense 層來(lái)創(chuàng)建一個(gè)全連接層,該層連接到我們的輸出密集層,具有 1 個(gè)單元和 Sigmoid 作為激活函數(shù)。然后我們用 SGD 優(yōu)化器和一些微調(diào)和二進(jìn)制交叉熵作為損失函數(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
_________________________________________________________________
訓(xùn)練resnet_history = base_model.fit(train_images, validation_data = valid_images, steps_per_epoch =int(train_images.n/8), epochs = 20)
讓我們用驗(yàn)證集訓(xùn)練我們的模型,訓(xùn)練圖像并驗(yàn)證它們。有 20 個(gè) epoch,每個(gè) epoch 的步數(shù)設(shè)置為訓(xùn)練樣本數(shù)/8 以進(jìn)行平衡,批量大小為 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
我們有很好的結(jié)果。讓我們看看它的圖表。性能圖精度圖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()
我們有很好的訓(xùn)練和驗(yàn)證準(zhǔn)確性。損失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()
而且損失少。結(jié)論即使如此少的數(shù)據(jù),ResNet50 也給出了令人滿意的結(jié)果。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 人形機(jī)器人,正狂奔在批量交付的曠野
- 4 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 5 解碼特斯拉新AI芯片戰(zhàn)略 :從Dojo到AI5和AI6推理引擎
- 6 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 7 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 8 2025年8月人工智能投融資觀察
- 9 10 Manus跑路,大廠掉線,只能靠DeepSeek了