关于人工智能:AI医生诊断肺炎

37次阅读

共计 3671 个字符,预计需要花费 10 分钟才能阅读完成。

作者 |Andre Ye
编译 |Flin
起源 |towardsdatascience

应用 CNN 辨认胸部 X 光片中的肺炎

人工智能在事实世界中有多种利用,其中十分重要的一项是在医疗行业中的利用。在本文中,我将提供卷积神经网络如何从胸部 X 射线诊断肺炎的代码和过程。

导入库

让咱们加载一些重要的库:

from keras.preprocessing.image 
import ImageDataGenerator, load_img from keras.models 
import Sequential from keras.layers 
import Conv2D, MaxPooling2D from keras.layers 
import Activation, Dropout, Flatten, Dense from keras 
import backend as K  
import os 
import numpy as np 
import pandas as np  
import matplotlib.pyplot as plt 
%matplotlib inline

理解数据

让咱们理解数据。查看两个样本图像,一个处于失常状态,另一个处于肺炎状态。

import matplotlib.pyplot as plt
img_name = 'NORMAL2-IM-0588-0001.jpeg'
img_normal = load_img('../input/chest_xray/chest_xray/train/NORMAL/' + img_name)
plt.imshow(img_normal)
plt.show()

img_name = 'person63_bacteria_306.jpeg' 
img_pneumonia = load_img('../input/chest_xray/chest_xray/train/PNEUMONIA/' + img_name)  
print('PNEUMONIA') 
plt.imshow(img_pneumonia) plt.show()

筹备数据以输出模型

设置一些重要的变量,例如图像,epoch 等:

img_width, img_height = 150, 150
nb_train_samples = 5217
nb_validation_samples = 17
epochs = 20
batch_size = 16

图像宽度和图像高度均为 150 像素。将有 5217 个样本须要训练,17 个样本须要验证(稍后咱们将通过数据加强增加更多)。验证数据是用于评估训练期间损失函数的数据(与测试数据相同,用于评估训练后的度量)。训练将分为 20 个 epoch,每组 16 幅图像。

指定图像的目录:

train_data_dir = '../input/chest_xray/chest_xray/train'
validation_data_dir = '../input/chest_xray/chest_xray/val'
test_data_dir = '../input/chest_xray/chest_xray/test'

最初,须要重塑图像:

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

因为图像是黑白的,所以每个像素有三个独立的色彩值,因而深度为 3。如果图像像 MNIST 数据集一样是黑白的,那么深度为 1。

创立模型

该模型将依照一个规范的 CNN 公式创立:多次重复卷积层、激活层和池化层,最初是 Flatten 层和规范全连贯层。在最初增加一个 dropout 层以进一步正则化,而后是另一个全连贯层(由两个激活函数突围)。

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

咱们能够通过调用 model.layers 获取无关层的信息。

咱们还能够理解 model.inputmodel.output的输出和输入应该是什么。

model.input 的输入:

model.output 的输入:

接下来,咱们必须应用损失函数、优化器和度量来编译模型。在这种状况下,抉择的损失函数是二元穿插熵(简直是广泛抉择)。抉择的优化器是 rmsprop,它依赖于图像中十分小的变动,在这种变动下分类工作做的很好。

编译代码如下:

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

数据裁减

只有 17 张图片须要验证,那么咱们将如何获取更多数据?答案:数据裁减。

咱们能够应用数据裁减来为咱们提供更多用于训练、验证和测试的数据。

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

要从新缩放,咱们须要测试

test_datagen = ImageDataGenerator(rescale=1. / 255)

上面的代码应用 flow_from_directory 间接将数据生成器利用于训练组目录中的图像。

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

以下代码为 validation 生成代码:

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

而这个用于test

test_generator = test_datagen.flow_from_directory(
    test_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

拟合模型

最初,咱们能够拟合模型!将依据生成的数据拟合模型:

model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size)

要保留模型的权重:

model.save_weights('first_try.h5')

评估模型性能

要评估模型在肺炎分类中的性能,请调用

scores = model.evaluate_generator(test_generator) 
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

输入为acc: 85.42%

可视化预测

当初,咱们能够可视化一些图像和预测。
预测“失常”的人:

一个预测为“肺炎”的人:

你能够设想这在医疗行业会有多大的帮忙——人工智能能够在人类可能无奈诊断肺炎的工作中提供很多帮忙。

原文链接:https://towardsdatascience.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

正文完
 0