尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

猴痘病识别

猴痘病识别 我的环境语言环境Python 3.12.7编译器jupyter notebook深度学习环境TensorFlow 2.18.01.导入数据from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tf data_dir E:/Jupyter/MR_K/4 data_dir pathlib.Path(data_dir) image_count len(list(data_dir.glob(*/*.jpg))) print(图片总数为,image_count)2.设置数据batch_size指定了在训练过程中每次输入到模型的图像数量较小的批量大小可以导致训练更不稳定但可能更好地泛化而较大的批量大小可以加快训练速度但可能需要更多的内存Monkeypox list(data_dir.glob(Monkeypox/*.jpg)) PIL.Image.open(str(Monkeypox[0])) batch_size 32 img_height 224 img_width 2243.加载数据data_dir这是包含图像数据的根目录路径。该目录应该按照类别组织每个类别的图像存放在不同的子目录中。validation_split0.2这个参数指定了20%的数据将被用作验证集。这意味着80%的数据将用于训练剩下的20%将被划分出来用于验证模型的性能。subsettraining这个参数指定了要创建的数据集是用于训练的数据集。结合validation_split参数这表明数据集将只包含用于训练的那部分数据。seed123提供一个随机种子以确保数据的打乱是可重复的。这对于实验的可重复性很重要。image_size(img_height, img_width)这个参数指定了所有图像将被调整到的尺寸。在这个例子中图像将被调整为img_height高度和img_width宽度这两个变量之前已经被定义为224。batch_sizebatch_size这个参数指定了每个批次中的图像数量。在这个例子中每个批次将包含batch_size变量定义的数量的图像这个变量之前已经被定义为32。train_ds tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split0.2, subsettraining, seed123, image_size(img_height, img_width), batch_sizebatch_size) val_ds tf.keras.preprocessing.image_dataset_from_directory( data_dir, validation_split0.2, subsetvalidation, seed123, image_size(img_height, img_width), batch_sizebatch_size)4.可视化数据plt.figure(figsize(20, 10))创建一个新的图形窗口设置图形的大小为宽20英寸、高10英寸。for images, labels in train_ds.take(1):从训练数据集train_ds中取出一个批次的数据。take(1)意味着只取出一个批次的数据而不是整个数据集。for i in range(20):循环20次因为每个批次的大小是32这里只显示前20张图像。ax plt.subplot(5, 10, i 1)创建一个5行10列的子图布局并在每次迭代中选择一个子图。plt.imshow(images[i].numpy().astype(uint8))将第i张图像转换为NumPy数组并显示在子图上。astype(uint8)确保图像数据类型为无符号8位整数这是显示图像的正确数据类型。plt.title(class_names[labels[i]])设置每个子图的标题为对应的类别名称。这里假设class_names是一个列表包含了所有类别的名称且顺序与标签的编码顺序相对应。plt.figure(figsize(20, 10)) for images, labels in train_ds.take(1): for i in range(20): ax plt.subplot(5, 10, i 1) plt.imshow(images[i].numpy().astype(uint8)) plt.title(class_names[labels[i]]) plt.axis(off)5.检查数据for image_batch, labels_batch in train_ds: print(image_batch.shape) print(labels_batch.shape) break5.配置数据集.cache()这个方法会将数据集的完整内容缓存到内存中。这对于从磁盘重复读取数据的情况非常有用可以显著提高数据读取速度。一旦数据被加载到内存中后续的迭代将直接从内存中读取数据而不是每次都从磁盘读取。.shuffle(1000)这个方法会将数据集中的元素打乱。参数1000指定了数据集在被打乱前的缓冲区大小即它会一次性加载1000个元素到内存中然后进行打乱。这个数字应该根据您的数据集大小和可用内存进行调整。打乱数据对于确保模型训练时的泛化能力非常重要因为它可以防止模型在学习过程中对数据的特定顺序产生依赖。.prefetch(buffer_sizeAUTOTUNE)这个方法会预取数据即在训练模型时它会在后台异步地预加载下一批数据。这样做可以隐藏数据加载的延迟使得模型训练更加高效。AUTOTUNE是一个特殊的参数值它会允许 TensorFlow 动态地调整预取的缓冲区大小以实现最佳性能。AUTOTUNE tf.data.AUTOTUNE train_ds train_ds.cache().shuffle(1000).prefetch(buffer_sizeAUTOTUNE) val_ds val_ds.cache().prefetch(buffer_sizeAUTOTUNE)6.构建CNN网络这段代码定义了一个顺序模型其中包括一个Rescaling层用于将输入图像的像素值从 [0, 255] 缩放到 [0, 1]。三个Conv2D卷积层用于提取图像特征每个卷积层后面跟着一个AveragePooling2D池化层。两个Dropout层用于减少过拟合。一个Flatten层用于将多维特征图展平成一维。一个包含 128 个单元的Dense全连接层。一个输出层单元数等于num_classes用于输出分类结果。num_classes 2 from tensorflow.keras.layers import Rescaling model models.Sequential([ Rescaling(1./255, input_shape(img_height, img_width, 3)), layers.Conv2D(16, (3, 3), activationrelu), # 卷积层1卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层12*2采样 layers.Conv2D(32, (3, 3), activationrelu), # 卷积层2卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层22*2采样 layers.Dropout(0.3), layers.Conv2D(64, (3, 3), activationrelu), # 卷积层3卷积核3*3 layers.Dropout(0.3), layers.Flatten(), # Flatten层连接卷积层与全连接层 layers.Dense(128, activationrelu), # 全连接层特征进一步提取 layers.Dense(num_classes) # 输出层输出预期结果 ]) model.summary() # 打印网络结构7.编译优化器Optimizeropt tf.keras.optimizers.Adam(learning_rate1e-4)这里使用了 Adam 优化器它是一种自适应学习率优化算法广泛用于深度学习模型。learning_rate1e-4设置了学习率为 0.0001。损失函数Loss Functionlosstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue)这里使用了SparseCategoricalCrossentropy损失函数它适用于多分类问题特别是当标签为整数时。from_logitsTrue参数表示输入值是 logits即模型输出的原始分数而不是经过 softmax 处理的概率分布。评估指标Metricsmetrics[accuracy]这里设置了准确率accuracy作为评估模型性能的指标。# 设置优化器 opt tf.keras.optimizers.Adam(learning_rate1e-4) model.compile(optimizeropt, losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue), metrics[accuracy])8.编译from tensorflow.keras.callbacks import ModelCheckpoint epochs 50 # 修改文件路径以包含 .weights.h5 checkpointer ModelCheckpoint(best_model.weights.h5, monitorval_accuracy, verbose1, save_best_onlyTrue, save_weights_onlyTrue) history model.fit(train_ds, validation_dataval_ds, epochsepochs, callbacks[checkpointer])8.Loss与Accuracy图评估提取历史数据acc和val_acc分别存储训练和验证的准确率。loss和val_loss分别存储训练和验证的损失值。创建图形和子图plt.figure(figsize(12, 4))创建一个新的图形窗口设置图形的大小为宽12英寸、高4英寸。plt.subplot(1, 2, 1)和plt.subplot(1, 2, 2)创建两个子图分别用于绘制准确率和损失值。绘制准确率曲线plt.plot(epochs_range, acc, labelTraining Accuracy)绘制训练准确率曲线。plt.plot(epochs_range, val_acc, labelValidation Accuracy)绘制验证准确率曲线。plt.legend(loclower right)添加图例位于右下角。plt.title(Training and Validation Accuracy)设置子图标题。绘制损失值曲线plt.plot(epochs_range, loss, labelTraining Loss)绘制训练损失值曲线。plt.plot(epochs_range, val_loss, labelValidation Loss)绘制验证损失值曲线。plt.legend(locupper right)添加图例位于右上角。plt.title(Training and Validation Loss)设置子图标题。from tensorflow.keras.callbacks import ModelCheckpoint epochs 50 # 修改文件路径以包含 .weights.h5 checkpointer ModelCheckpoint(best_model.weights.h5, monitorval_accuracy, verbose1, save_best_onlyTrue, save_weights_onlyTrue) history model.fit(train_ds, validation_dataval_ds, epochsepochs, callbacks[checkpointer])9.指定图片进行预测from PIL import Image import numpy as np img Image.open(E:/Jupyter/MR_K/4/jiance.jpg) #这里选择你需要预测的图片 image tf.image.resize(img, [img_height, img_width]) img_array tf.expand_dims(image, 0) predictions model.predict(img_array) # 这里选用你已经训练好的模型 print(预测结果为,class_names[np.argmax(predictions)])总结提示这里对文章进行总结例如以上就是今天要讲的内容本文仅仅简单介绍了pandas的使用而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
返回列表