当前位置: 首页 > news >正文

基于tensorflow和NasNet的皮肤癌分类项目

数据来源

https://challenge.isic-archive.com/data/#2019

数据划分

写了个脚本划分

for line in open('ISIC/labels.csv').readlines()[1:]:split_line = line.split(',')img_file = split_line[0]benign_malign = split_line[1]# 0.8 for train, 0.1 for test, 0.1 for validationrandom_num = random.random()if random_num < 0.8:location = traintrain_examples += 1elif random_num < 0.9:location = validationvalidation_examples += 1else:location = testtest_examples += 1if int(float(benign_malign)) == 0:shutil.copy('ISIC/images/' + img_file + '.jpg',location + 'benign/' + img_file + '.jpg')elif int(float(benign_malign)) == 1:shutil.copy('ISIC/images/' + img_file + '.jpg',location + 'malignant/' + img_file + '.jpg')print(f'Number of training examples {train_examples}')
print(f'Number of test examples {test_examples}')
print(f'Number of validation examples {validation_examples}')

数据生成模块

train_datagen = ImageDataGenerator(rescale=1.0 / 255,rotation_range=15,zoom_range=(0.95, 0.95),horizontal_flip=True,vertical_flip=True,data_format='channels_last',dtype=tf.float32,
)train_gen = train_datagen.flow_from_directory('data/train/',target_size=(img_height, img_width),batch_size=batch_size,color_mode='rgb',class_mode='binary',shuffle=True,seed=123,
)

 模型加载和运行

由于数据量较大,本次使用NasNet, 来源于nasnet | Kaggle

# NasNet
model = keras.Sequential([hub.KerasLayer(r'C:\\Users\\32573\\Desktop\\tools\py\\cancer_classification_project\\saved_model',trainable=True),layers.Dense(1, activation='sigmoid'),
])
model.compile(optimizer=keras.optimizers.Adam(3e-4),loss=[keras.losses.BinaryCrossentropy(from_logits=False)],metrics=['accuracy']
)model.fit(train_gen,epochs=1,steps_per_epoch=train_examples // batch_size,validation_data=validation_gen,validation_steps=validation_examples // batch_size,
)

运行结果 

 模型其他评估指标

METRICS = [keras.metrics.BinaryAccuracy(name='accuracy'),keras.metrics.Precision(name='precision'),keras.metrics.Recall(name='Recall'),keras.metrics.AUC(name='AUC'),
]

 绘制roc图

def plot_roc(label, data):predictions = model.predict(data)fp, tp, _ = roc_curve(label, predictions)plt.plot(100*fp, 100*tp)plt.xlabel('False Positives [%]')plt.ylabel('True Positives [%]')plt.show()test_labels = np.array([])
num_batches = 0for _, y in test_gen:test_labels = np.append(test_labels, y)num_batches = 1if num_batches == math.ceil(test_examples / batch_size):breakplot_roc(test_labels, test_gen)

相关文章:

  • SQL—DQL(数据查询语言)之小结
  • 【TensorFlow深度学习】LeNet-5卷积神经网络实战分析
  • 2024华为OD机试真题-机场航班调度-C++(C卷D卷)
  • python程序控制结构
  • 前端基础1-6 :es6
  • 【Unity知识点详解】Addressables的资源加载
  • K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动
  • 代码审计(工具Fortify 、Seay审计系统安装及漏洞验证)
  • 记一次服务器数据库被攻击勒索
  • 【Linux 网络】网络基础(三)(其他重要协议或技术:DNS、ICMP、NAT)
  • 数字经济讲师培训师教授唐兴通谈新质生产力数字化转型高质量发展AI人工智能大模型大数据经信委大数据管理局
  • Chrome谷歌浏览器如何打开不安全页面的禁止权限?
  • Keil 5恢复默认布局,左边状态栏
  • 基于java的CRM客户关系管理系统(二)
  • .NET 快速重构概要1
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【翻译】babel对TC39装饰器草案的实现
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 5、React组件事件详解
  • IndexedDB
  • JavaScript函数式编程(一)
  • Redis中的lru算法实现
  • Travix是如何部署应用程序到Kubernetes上的
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue 个人积累(使用工具,组件)
  • Vue 重置组件到初始状态
  • XML已死 ?
  • 和 || 运算
  • 开源SQL-on-Hadoop系统一览
  • 盘点那些不知名却常用的 Git 操作
  • 算法系列——算法入门之递归分而治之思想的实现
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (06)金属布线——为半导体注入生命的连接
  • (1)常见O(n^2)排序算法解析
  • (10)STL算法之搜索(二) 二分查找
  • (12)目标检测_SSD基于pytorch搭建代码
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (一)Dubbo快速入门、介绍、使用
  • (转)菜鸟学数据库(三)——存储过程
  • (转)人的集合论——移山之道
  • (转载)利用webkit抓取动态网页和链接
  • .net Application的目录
  • .NET MVC之AOP
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net分布式压力测试工具(Beetle.DT)