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))
)

五类医学图像分类 深度学习相关推荐

  1. 五本必读的深度学习圣经书籍,入门 AI 从 深度学习 开始

    原标题:`五本必读的深度学习圣经书籍,入门 AI 从「深度学习」开始` (以下以 Daniel Jeffries 第一人称撰写) 多年来,由于实验室研究和现实应用效果之间的鸿沟,少有人持续研究人工智能 ...

  2. 医学影像-深度学习综述

    论文笔记<深度学习目前先进的技术与应用在医学影像> 1.引言 CAD(计算机辅助检测与诊断) 一个常见的传统处理过程包括三个步骤: 目标分割 特征计算 疾病分类 深度学习: 隐藏在原始图像 ...

  3. 五个角度解释深度学习中 Batch Normalization为什么效果好?

    https://www.toutiao.com/a6699953853724361220/ 深度学习模型中使用Batch Normalization通常会让模型得到更好表现,其中原因到底有哪些呢?本篇 ...

  4. 第五篇:基于深度学习的人脸特征点检测 - 生成TFRecord文件

    在上一篇博文中,我们已经获取到了所有样本的面部区域,并且对面部区域的有效性进行了验证.当使用TensorFlow进行神经网络训练时,涉及到的大量IO操作会成为训练速度的瓶颈.为了加快训练的速度,方便后 ...

  5. 面试系列(五):寒武纪 深度学习框架研发工程师

    初面 1.自我介绍. 2.聊项目中的一些问题. 3.C++多态 如何实现一个多态? 多态是为了解决什么?优点是什么? 如何用C语言实现一个多态?说下思路. 4.你的项目中用过哪些设计原则? 5.对于常 ...

  6. 医学领域深度学习模型训练的挑战

    2020-05-18 21:29:24 在医学数据集的训练算法期间面临的许多问题中,这三个最常见: 类别不均衡 多任务 数据集大小 对于这些问题,我将分享一些解决问题的技术. 类别不均衡挑战 在现实世 ...

  7. TensorFlow快餐教程:程序员快速入门深度学习五步法

    作者简介:刘子瑛,阿里巴巴操作系统框架专家:CSDN 博客专家.工作十余年,一直对数学与人工智能算法相关.新编程语言.新开发方法等相关领域保持浓厚的兴趣.乐于通过技术分享促进新技术进步. 作为一个程序 ...

  8. TensorFlow教程:快速入门深度学习五步法(附Keras实例)

    授权自AI科技大本营(ID:rgznai100) 作者:刘子瑛 本文约1300字,建议阅读6分钟. 本文教你如何利用5 步+4 种基本元素+9 种基本层结构进行深度学习模型开发. 作为一个程序员,我们 ...

  9. 深度学习实战_五天入门深度学习,这里有一份PyTorch实战课程

    这是一门五天入门深度学习的实战课程. 想入门深度学习的小伙伴有福了!dataflowr 最近推出了一门五天初步掌握深度学习的实战教程(实战使用 PyTorch 框架),有知识点有实例有代码,值得一看. ...

最新文章

  1. odoo tree视图过滤数据_在EA中建立优雅的仪表板视图
  2. 很有趣的问题,Public继承和默认的集成
  3. 类型转换与采样 || SMOTE算法
  4. 【视频课】图像分类最新内容来了(言有三录制6大理论部分讲解)
  5. C++程序代码优化的方法
  6. python实现画图哆啦A梦
  7. 2月28日云栖精选夜读 | 阿里云率先达成国家绿色数据中心标准,平均PUE低于1.3...
  8. 【教程】利用OBS+腾讯会议进行线上考试
  9. 开发者测试你必须知道的7件事
  10. MATLAB中如何删除坐标上已画出的内容
  11. 双层玻璃窗的功效模型matlab,数学建模实例双层玻璃的功效
  12. 胖子哥的大数据之路(8)- 数据仓库命名规范
  13. 使用latex做三线表
  14. ABAP 供应商主数据比较常用的表
  15. java 聊天室 私聊_使用socket实现网络聊天室和私聊功能
  16. ES插件es-head下载和安装
  17. java还原三阶魔方_魔方小站四阶魔方教程2 一看就懂的魔方教程(魔方玩法视频教程+还原公式一步一步图解+3D动画)...
  18. OneNote for windows10 鼠标点击没反应
  19. 英特尔第十代处理器为什么不支持win7_10代cpu能不能装win7?10代cpu装win7全面分析(支持十代...
  20. OpenCV Gabor滤波器实现纹理提取与缺陷分析

热门文章

  1. 【指纹识别】指纹识别【含GUI Matlab源码 029期】
  2. Door to Door 美国电影 《永不放弃》
  3. 电脑办公利器 屈指可数的软件!
  4. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统报告(内含代码)...
  5. latex文件里面一个章节放的图表太多编译出现oo many unprocessed floats的解决方案
  6. [附源码]计算机毕业设计JAVAjsp基于个性化的汽车购买推荐系统
  7. 中秋未到却卖到断货的月饼,究竟有多好吃?
  8. PiPi 和 HuHu
  9. Logistic Regression推导
  10. 读源码:PopupWindow