基于深度学习的图像识别|#21天学习挑战赛—深度学习实战100例#——乳腺癌识别

活动地址:CSDN21天学习挑战赛

文章目录
  • 前言
  • 一、拆解任务
  • 二、学习内容
    • 1. 数据处理
    • 2. 建立神经网络
    • 3.预测和模型评估
  • 总结

前言 【基于深度学习的图像识别|#21天学习挑战赛—深度学习实战100例#——乳腺癌识别】本周的任务有3个,生成手写数字,动物识别,乳腺癌识别。因为任务不同,那么可能会使用到不同的预处理、网络等等。
本节主要学习乳腺癌识别。
一、拆解任务 首先需要了解这次需要处理的任务,这里贴一张老师的数据展示图。
基于深度学习的图像识别|#21天学习挑战赛—深度学习实战100例#——乳腺癌识别
文章图片

数据分为图片及其对应的标签,这里需要将标签转为离散的数字。
二、学习内容 这次的任务其实跟之前做过的识别衣服、识别手写数字等等的类似,本章其实主要以复习以前学过的知识为主。
1. 数据处理 读数据(很常规的内容)
主要是从磁盘读数据,然后随机划分为训练集、验证集、测试集。完成一些必要的预处理,比如channel,resize,等等。
import pathlibdata_dir = "./32-data" data_dir = pathlib.Path(data_dir) image_count = len(list(data_dir.glob('*/*'))) print("图片总数为:",image_count) batch_size = 16 img_height = 50 img_width= 50 """ 关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789 """ train_ds = tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split=0.2, subset="training", seed=12, image_size=(img_height, img_width), batch_size=batch_size) """ 关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789 """ val_ds = tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split=0.2, subset="validation", seed=12, image_size=(img_height, img_width), batch_size=batch_size) class_names = train_ds.class_names print(class_names) AUTOTUNE = tf.data.AUTOTUNEdef train_preprocessing(image,label): return (image/255.0,label)train_ds = ( train_ds.cache() .shuffle(1000) .map(train_preprocessing)# 这里可以设置预处理函数 #.batch(batch_size)# 在image_dataset_from_directory处已经设置了batch_size .prefetch(buffer_size=AUTOTUNE) )val_ds = ( val_ds.cache() .shuffle(1000) .map(train_preprocessing)# 这里可以设置预处理函数 #.batch(batch_size)# 在image_dataset_from_directory处已经设置了batch_size .prefetch(buffer_size=AUTOTUNE) )

2. 建立神经网络 老师这里自己写了一个网络(当然网络比较简单),一般的网络包含卷积层,maxpooling,全链接层。同时训练之前需要配置优化器、loss等设置。然后就可以进行训练了。
import tensorflow as tfmodel = tf.keras.Sequential([ tf.keras.layers.Conv2D(filters=16,kernel_size=(3,3),padding="same",activation="relu",input_shape=[img_width, img_height, 3]), tf.keras.layers.Conv2D(filters=16,kernel_size=(3,3),padding="same",activation="relu"),tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Dropout(0.5), tf.keras.layers.Conv2D(filters=16,kernel_size=(3,3),padding="same",activation="relu"), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Conv2D(filters=16,kernel_size=(3,3),padding="same",activation="relu"), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(2, activation="softmax") ]) model.summary() model.compile(optimizer="adam", loss='sparse_categorical_crossentropy', metrics=['accuracy']) from tensorflow.keras.callbacks import ModelCheckpoint, Callback, EarlyStopping, ReduceLROnPlateau, LearningRateSchedulerNO_EPOCHS = 100 PATIENCE= 5 VERBOSE= 1# 设置动态学习率 annealer = LearningRateScheduler(lambda x: 1e-3 * 0.99 ** (x+NO_EPOCHS))# 设置早停 earlystopper = EarlyStopping(monitor='loss', patience=PATIENCE, verbose=VERBOSE)# checkpointer = ModelCheckpoint('best_model.h5', monitor='val_accuracy', verbose=VERBOSE, save_best_only=True, save_weights_only=True) train_model= model.fit(train_ds, epochs=NO_EPOCHS, verbose=1, validation_data=https://www.it610.com/article/val_ds, callbacks=[earlystopper, checkpointer, annealer])

3.预测和模型评估 预测和评估也是和之前的练习相似。一般的模型评估都是准确率、召回率。
acc = train_model.history['accuracy'] val_acc = train_model.history['val_accuracy']loss = train_model.history['loss'] val_loss = train_model.history['val_loss']epochs_range = range(len(acc))plt.figure(figsize=(12, 4)) 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('Training and Validation Accuracy')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('Training and Validation Loss') plt.show()

总结 本章作为课程最后一节,没什么新内容了,复习了一下以前学过的概念~

    推荐阅读