• #21天学习挑战赛—深度学习实战100例#——乳腺癌识别


    活动地址:CSDN21天学习挑战赛
    本文为🔗365天深度学习训练营 中的学习记录博客


    前言

    本周的任务有3个,生成手写数字,动物识别,乳腺癌识别。因为任务不同,那么可能会使用到不同的预处理、网络等等。
    本节主要学习乳腺癌识别。

    一、拆解任务

    首先需要了解这次需要处理的任务,这里贴一张老师的数据展示图。
    在这里插入图片描述
    数据分为图片及其对应的标签,这里需要将标签转为离散的数字。

    二、学习内容

    这次的任务其实跟之前做过的识别衣服、识别手写数字等等的类似,本章其实主要以复习以前学过的知识为主。

    1. 数据处理

    读数据(很常规的内容)
    主要是从磁盘读数据,然后随机划分为训练集、验证集、测试集。完成一些必要的预处理,比如channel,resize,等等。

    import pathlib
    
    data_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.AUTOTUNE
    
    def 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)
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    2. 建立神经网络

    老师这里自己写了一个网络(当然网络比较简单),一般的网络包含卷积层,maxpooling,全链接层。同时训练之前需要配置优化器、loss等设置。然后就可以进行训练了。

    import tensorflow as tf
    
    model = 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, LearningRateScheduler
    
    NO_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=val_ds,
                      callbacks=[earlystopper, checkpointer, annealer])
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    总结

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

  • 相关阅读:
    网络运维与网络安全 学习笔记2023.11.21
    经典OJ题:找环节点——代码解析
    UI原型图
    深入理解JNINativeInterface函数<三>
    Android Studio 汉化
    JSP商品防伪网站系统myeclipse定制开发mysql数据库网页模式java编程jdbc
    敏捷已死?
    UI 自动化测试框架:PO 模式+数据驱动 【详解版】
    学习计算机视觉,必备六大知识点!(文末有惊喜)
    【C语言】全面解析结构体,结构体知识点整理
  • 原文地址:https://blog.csdn.net/qq_20491295/article/details/126355853