本实验全部源码以及数据集以上架面包多(超便宜),点击购买,关注公众号[全都是码农]免费获得更多超值内容!
实验内容
某地区的多个罗非鱼池塘水样数据,包含水产专家按水色判断水质分类的数据,以及用数码相机按照标准进行水色采集的数据,如表1和图1所示。每个水质图片命名规则是“类别-编号.jpg”,如“1_1.jpg”是第一类样本的图片。请根据这些样本,利用数字图像处理技术,通过水色图像实现水质的自动评价。
水色 | 浅绿色(清水或浊水) | 灰蓝色 | 黄褐色 | 茶褐色 (姜黄、茶褐、红褐、褐中带绿等) | 绿色 (黄绿、油绿、蓝绿、墨绿、绿中带褐等) |
---|---|---|---|---|---|
水质类别 | 1 | 2 | 3 | 4 | 5 |
实验过程
观察样本图片,发现其几乎每张图片都有背景噪声,所以需要先对图像进行预处理,如下代码:
输入fromdir为图片文件夹,todir为输出文件夹。
对处理过的图片进行HSV颜色矩提取并打上标签:
接下来编写神经网络相关代码:
分析csv数据:
读取颜色矩:
定义网络变量:
class NNetConfig():
num_classes = 5 # 多分类的种类
num_epochs = 500 # 训练总批次
print_per_epoch = 100 # 每训练多少批次时打印训练损失函数值和预测准确率值
# layersls = [9, 20, 30,60,120,60,30, 20, 5] # 极其不稳定
# layersls = [9, 20, 30, 60, 120, 60, 30, 20, 5] # 【输入,隐藏各层节点数,输出】 500轮90%一般,2000轮100%完全拟合
layersls = [9, 20, 60, 20, 5] # 【输入,隐藏各层节点数,输出】 500轮 90%稳定 2000轮过拟合
learning_rate = 0.01 # 网络学习率
train_filename = './clour/xunshu.csv' # 训练数据
test_filename = './clour/ceshu.csv' # 测试数据
best_model_savepath = "./dnn/" # 最好模型的存放文件夹
编写网络:
class NNet(object):
def __init__(self, config):
self.config = config
self.layersls = config.layersls
self.NNet()
def NNet(self): # 根据给出的输入输出及每层网络的节点数搭建深度学习网络
"""
根据给出的输入输出及每层网络的节点数搭建深度学习网络
:param layersls: 【输入,隐藏各层节点数,输出】
:return:
"""
model = tf.keras.Sequential()
for i in range(len(config.layersls)):
if (i == 0): # 确定网络的输入和网络的第一层节点数
model.add(tf.keras.layers.Dense(config.layersls[1],
activation="relu",
input_shape=(config.layersls[0],)))
i += 1
elif (i == len(config.layersls) - 1): # 确定网络的输出
model.add(tf.keras.layers.Dense(config.layersls[i]))
else: # 网络的各隐藏层节点数
model.add(tf.keras.layers.Dense(config.layersls[i],
activation="relu"))
return model
剩下详细代码自行下载阅读
实验结果
运行zero_slip.py输出如下:
\1. filename **is** :2_6.jpg
\2. the fulll name of the file **is** :.\xun\2_6.jpg
\3. parent **is** :.\xun
\4. filename **is** :2_7.jpg
\5. the fulll name of the file **is** :.\xun\2_7.jpg
\6. parent **is** :.\xun
\7. <......>
\8. the fulll name of the file **is** :.\xun\5_5.jpg
\9. parent **is** :.\xun
\10. filename **is** :5_6.jpg
\11. the fulll name of the file **is** :.\xun\5_6.jpg
\12. 训练集集切割完毕
切割图像部分如下:
如图所示切割完整,效果良好。
运行first_feature.py进行特征提取:
1. 以输出颜色矩到./clour/ceshu.csv
2. 以输出颜色矩到./clour/xunshu.csv
输出完整。
运行second_train.py:
输出loss值和准确率值:
\1. <DatasetV1Adapter shapes: (), types: tf.string>
\2. 当前最高准确率:0.455:
\3. Epoch 000: Loss: 6.768, Accuracy: 45.455%, isBest:*
\4. 当前最高准确率:0.591:
\5. Epoch 100: Loss: 1.072, Accuracy: 59.091%, isBest:*
\6. 当前最高准确率:0.636:
\7. Epoch 200: Loss: 0.787, Accuracy: 63.636%, isBest:*
\8. 当前最高准确率:0.727:
\9. Epoch 300: Loss: 0.613, Accuracy: 72.727%, isBest:*
\10. Epoch 400: Loss: 0.723, Accuracy: 68.182%, isBest:
\11. 开始对已训练网络进行测试:
\12. <DatasetV1Adapter shapes: (), types: tf.string>
\13. 测试数据的测试结果为: 72.727%
\14. tf.Tensor(0.7272727272727273, shape=(), dtype=float64)
\15. 预测下面1个水质颜色矩的类别(正确答案为:三):
\16. [[29.5469, 146.3947, 123.1732, 0.864407537, 5.590716583, 1.752484454, 1.029934609, 6.391303213, 2.040322913]]
\17. ['三']
最后输出正确的验证结果。
运行th_app.py并输入图片地址 ./cep/1_50.jpg :
1. 输入图片地址:./cep/1_50.jpg
2. 此图片为:['一']
结果正确。
本实验全部源码以及数据集以上架面包多(超便宜),点击购买,关注公众号[全都是码农]免费获得更多超值内容!
I'm so cool. Please give me money.
- 本文链接:https://www.tjzzz.com/posts/2bcefabf.html
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。