基于深度学习的中医药识别与预测

中医药在预防和治疗新型冠状病毒肺炎过程中发挥了很大的作用,作为中国现代大学生,对我国传统的中医药应该有基本的了解。本题中教师将提供含有百合、党参、枸杞、槐花和金银花五类中药图片的数据集。请根据理论课和上机课所学知识修改教师提供的或自己线上搜索到的 Python+TensorFlow 程序 Python+PyTorch 程序,完成以下任务:
(1) 将数据集划分为训练集、测试集和验证集,划分比例为 6:2:2,划分结果存储至名称分别为 train, test, validation 的文件夹中;
(2) 以上述数据为基础,训练出适当的模型存储于名称为“model”的文件夹中;
(3) 实现对验证集中各 2 个百合、党参、枸杞、槐花和金银花进行识别,将结果导出并存储为名称为 result.jpg 的图片文件中。
要求写清楚具体的操作步骤、所用到的网络结构、数学模型以及结果。

划分数据集

将数据集划分为训练集、测试集和验证集,划分比例为6:2:2,划分结果存储至名称为train, test, validation 的文件夹中

pSKvcUs.png

图像增强

在深度学习中,为了丰富图像训练集,更好的提取图像特征,泛化模型(防止模型过拟合),一般都会对数据图像进行增强。常用的方式有:旋转图像,剪切图像,改变图像色差,扭曲图像特征,改变图像尺寸大小,增强图像噪音(一般使用高斯噪音,盐椒噪音)。
本例中采用缩放,裁剪,变形,翻转,明亮度调整,平移,高斯噪音,盐椒噪音对图像进行增强,丰富训练集数量,提高神经网络模型泛化能力。

数据预处理

在本例中,将图片形状调整为(3,65,65)的大小,然后进行归一化处理。(彩色图片通道数为3,65×65为图片大小)

pSKvRCq.png

pSKvf2V.png

模型选择

在本例选择Alexnet模型进行训练

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

# 网络模型构建
class AlexNet(nn.Module):
def __init__(self, num_classes=5):
super(AlexNet, self).__init__()
self.features = nn.Sequential(
nn.Conv2d(3, 48, kernel_size=11),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(48, 128, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(128, 192, kernel_size=3, stride=1, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(192, 192, kernel_size=3, stride=1, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(192, 128, kernel_size=3, stride=1, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
)
self.classifier = nn.Sequential(
nn.Linear(6 * 6 * 128, 2048),
nn.ReLU(inplace=True),
nn.Dropout(0.5),
nn.Linear(2048, 2048),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(2048, num_classes),
)

def forward(self, x):
x = self.features(x)
x = torch.flatten(x, start_dim=1)
x = self.classifier(x)

return x

pSKvb5R.png

优化器选择

在本例选择动量法(Momentum)进行优化,其中,学习率设为0.01,动量设为0.9,权重衰减设为0.0005。

1
2
# 优化器的选择
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=0.0005)

超参数设置

在本例使用GPU进行训练,epoch=50,批量大小batch_size=256

模型训练

在本例由于验证集损失相差很小,所以选择采用验证集准确率最高的模型为最优模型。
最优模型验证集准确率为82.22222222222223%,测试集准确率为83.52272727272727%。
最优模型保存至model文件夹下,其余模型保存至save_model文件夹下,图4-7保存至res文件夹下名为train.jpg


pSKxmqg.png

模型检验

在验证集中随机抽取百合、党参、枸杞、槐花和金银花的图片各2 张,调用最优模型进行识别,结果存储在res文件夹下的 result.jpg 的图片文件中。

实验配置

本例基于python + pytorch 实现
pytorch中文文档: https://ptorch.com/docs/1/torch-nn