五类医学图像分类 深度学习
import matplotlib.pyplot as plt
import numpy as np
import PIL
import tensorflow as tffrom tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
读取图片
import pathlib
data_dir = r'C:\Users\86188\TensorFlow机器学习\CNN图像分类\五类图像'
data_dir = pathlib.Path(data_dir)
print(data_dir)
image_count = len(list(data_dir.glob('*/*.jpeg')))
print(image_count)
查看图片:
腹部CT = list(data_dir.glob('腹部CT/*'))
PIL.Image.open(str(腹部CT[0]))
脑部CT = list(data_dir.glob('脑部CT/*'))
PIL.Image.open(str(脑部CT[0]))
手X光片 = list(data_dir.glob('手X光片/*'))
PIL.Image.open(str(手X光片[0]))
胸部CT = list(data_dir.glob('胸部CT/*'))
PIL.Image.open(str(胸部CT[0]))
胸部X光片 = list(data_dir.glob('胸部X光片/*'))
PIL.Image.open(str(胸部X光片[0]))
定义一些参数:
#为加载器定义一些参数
batch_size = 32
img_height = 90
img_width = 90
使用 80% 的图像进行训练,使用 20% 的图像进行验证:
train_ds = tf.keras.utils.image_dataset_from_directory(data_dir,validation_split=0.2,subset="training",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
val_ds = tf.keras.utils.image_dataset_from_directory(data_dir,validation_split=0.2,subset="validation",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
class_names = train_ds.class_names
print(class_names)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']plt.figure(figsize=(10, 10))
for images, labels in train_ds.take(1):for i in range(9):ax = plt.subplot(5, 5,i+1)plt.imshow(images[i].numpy().astype("uint8"))plt.title(class_names[labels[i]])plt.axis("off")
for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)break
image_batch是形状的张量(32, 90, 90, 3)。这是一批 32 张形状的图像90x90x3(最后一个维度是指颜色通道 RGB)。label_batch是 shape 的张量,(32,)这些是 32 幅图像的对应标签。
AUTOTUNE = tf.data.AUTOTUNE
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)
normalization_layer = layers.Rescaling(1./255)
normalized_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))
image_batch, labels_batch = next(iter(normalized_ds))
first_image = image_batch[0]
print(np.min(first_image), np.max(first_image))
划分数据集并构建模型(CNN模型搭建):
num_classes = len(class_names)model = Sequential([layers.Rescaling(1./255, input_shape=(img_height, img_width, 3)),layers.Conv2D(16, 3, padding='same', activation='relu'),layers.MaxPooling2D(), #最大池化层layers.Conv2D(32, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Conv2D(64, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Flatten(),layers.Dense(128, activation='relu'),layers.Dense(num_classes)
])
调用compile()方法指定损失函数和要使用的优化器(选择 Adam):
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
model.summary()
模型训练:
epochs=10 #迭代次数
history = model.fit(train_ds,validation_data=val_ds,epochs=epochs
)
从训练集和验证集可以看出,该模型在验证集和测试的准确率高达100%,不存在过拟合的情况,也不需要再使用数据增强或dropout等方法了。
绘制准确率和损失值曲线:
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']loss = history.history['loss']
val_loss = history.history['val_loss']epochs_range = range(epochs)plt.figure(figsize=(8, 8))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('训练集和验证集的准确度')plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('训练集和验证集的损失值')
plt.show()
评估模型:
loss,accuracy = model.evaluate(train_ds, verbose=1) #verbose = 1 为输出进度条记录print('损失值:',loss)
print('准确度:', accuracy )
进行预测:
手X光片_path = r"C:/Users/86188/TensorFlow机器学习/datasets/5ClassMedicalImg/手X光片/001017.jpeg"img = tf.keras.utils.load_img(手X光片_path, target_size=(img_height, img_width)
)
img_array = tf.keras.utils.img_to_array(img)
img_array = tf.expand_dims(img_array, 0) # Create a batchpredictions = model.predict(img_array)
score = tf.nn.softmax(predictions[0])print("这个图片大概属于 {} 有着 {:.2f}%准确度.".format(class_names[np.argmax(score)], 100 * np.max(score))
)
五类医学图像分类 深度学习相关推荐
- 五本必读的深度学习圣经书籍,入门 AI 从 深度学习 开始
原标题:`五本必读的深度学习圣经书籍,入门 AI 从「深度学习」开始` (以下以 Daniel Jeffries 第一人称撰写) 多年来,由于实验室研究和现实应用效果之间的鸿沟,少有人持续研究人工智能 ...
- 医学影像-深度学习综述
论文笔记<深度学习目前先进的技术与应用在医学影像> 1.引言 CAD(计算机辅助检测与诊断) 一个常见的传统处理过程包括三个步骤: 目标分割 特征计算 疾病分类 深度学习: 隐藏在原始图像 ...
- 五个角度解释深度学习中 Batch Normalization为什么效果好?
https://www.toutiao.com/a6699953853724361220/ 深度学习模型中使用Batch Normalization通常会让模型得到更好表现,其中原因到底有哪些呢?本篇 ...
- 第五篇:基于深度学习的人脸特征点检测 - 生成TFRecord文件
在上一篇博文中,我们已经获取到了所有样本的面部区域,并且对面部区域的有效性进行了验证.当使用TensorFlow进行神经网络训练时,涉及到的大量IO操作会成为训练速度的瓶颈.为了加快训练的速度,方便后 ...
- 面试系列(五):寒武纪 深度学习框架研发工程师
初面 1.自我介绍. 2.聊项目中的一些问题. 3.C++多态 如何实现一个多态? 多态是为了解决什么?优点是什么? 如何用C语言实现一个多态?说下思路. 4.你的项目中用过哪些设计原则? 5.对于常 ...
- 医学领域深度学习模型训练的挑战
2020-05-18 21:29:24 在医学数据集的训练算法期间面临的许多问题中,这三个最常见: 类别不均衡 多任务 数据集大小 对于这些问题,我将分享一些解决问题的技术. 类别不均衡挑战 在现实世 ...
- TensorFlow快餐教程:程序员快速入门深度学习五步法
作者简介:刘子瑛,阿里巴巴操作系统框架专家:CSDN 博客专家.工作十余年,一直对数学与人工智能算法相关.新编程语言.新开发方法等相关领域保持浓厚的兴趣.乐于通过技术分享促进新技术进步. 作为一个程序 ...
- TensorFlow教程:快速入门深度学习五步法(附Keras实例)
授权自AI科技大本营(ID:rgznai100) 作者:刘子瑛 本文约1300字,建议阅读6分钟. 本文教你如何利用5 步+4 种基本元素+9 种基本层结构进行深度学习模型开发. 作为一个程序员,我们 ...
- 深度学习实战_五天入门深度学习,这里有一份PyTorch实战课程
这是一门五天入门深度学习的实战课程. 想入门深度学习的小伙伴有福了!dataflowr 最近推出了一门五天初步掌握深度学习的实战教程(实战使用 PyTorch 框架),有知识点有实例有代码,值得一看. ...
最新文章
- odoo tree视图过滤数据_在EA中建立优雅的仪表板视图
- 很有趣的问题,Public继承和默认的集成
- 类型转换与采样 || SMOTE算法
- 【视频课】图像分类最新内容来了(言有三录制6大理论部分讲解)
- C++程序代码优化的方法
- python实现画图哆啦A梦
- 2月28日云栖精选夜读 | 阿里云率先达成国家绿色数据中心标准,平均PUE低于1.3...
- 【教程】利用OBS+腾讯会议进行线上考试
- 开发者测试你必须知道的7件事
- MATLAB中如何删除坐标上已画出的内容
- 双层玻璃窗的功效模型matlab,数学建模实例双层玻璃的功效
- 胖子哥的大数据之路(8)- 数据仓库命名规范
- 使用latex做三线表
- ABAP 供应商主数据比较常用的表
- java 聊天室 私聊_使用socket实现网络聊天室和私聊功能
- ES插件es-head下载和安装
- java还原三阶魔方_魔方小站四阶魔方教程2 一看就懂的魔方教程(魔方玩法视频教程+还原公式一步一步图解+3D动画)...
- OneNote for windows10 鼠标点击没反应
- 英特尔第十代处理器为什么不支持win7_10代cpu能不能装win7?10代cpu装win7全面分析(支持十代...
- OpenCV Gabor滤波器实现纹理提取与缺陷分析
热门文章
- 【指纹识别】指纹识别【含GUI Matlab源码 029期】
- Door to Door 美国电影 《永不放弃》
- 电脑办公利器 屈指可数的软件!
- c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...
- latex文件里面一个章节放的图表太多编译出现oo many unprocessed floats的解决方案
- [附源码]计算机毕业设计JAVAjsp基于个性化的汽车购买推荐系统
- 中秋未到却卖到断货的月饼,究竟有多好吃?
- PiPi 和 HuHu
- Logistic Regression推导
- 读源码:PopupWindow