基于TensorFlow的卷积神经网络的岩石图像分类识别(简易实践案例)

基于TensorFlow的卷积神经网络的岩石图像分类识别

    • 题目简述
    • 个人项目运行环境
    • 数据处理
    • 模型实现
    • 结果分析
    • 完整代码

题目简述

今有砾岩(Conglomerate)、安山岩(Andesite)、石灰岩(Limestone)、石英岩(Quartzite)和花岗岩(Granite)5种岩石图片,每张图片的大小不一。试建立卷积神经模型,利用训练数据集进行训练,并对测试集进行分类识别。
数据集 CSDN 下载.
如果资源失效可以再我的发布资源里找对应链接

个人项目运行环境

  • PyCharm 2017.1
  • Python 3.8.6
  • numpy 1.19.5
  • TensorFlow 2.5.0
  • scikit-learn 0.24.2

导入模块

import os
import numpy as np
from PIL import Image
from tensorflow.keras import layers,models
from sklearn.model_selection import train_test_split

数据处理

这里我们构造卷积神经网络模型所需要的输入数据和输出数据,其中输入数据为所有彩图数据。我所展示的样例共有300张图片,统一取图像中心点100×100像素,共有R、G、B三个通道,并对每个通道像素值归一化,彩色图片有3个通道(也可以使用OpenCV的函数查看自己使用图片的通道数),故所有彩图数据可以用一个四维数组来存储,其形态为 (300,100,100,3)。记为X。输出数据为岩石类型,依次为砾岩、安山岩、石灰岩、石英岩和花岗岩(不确定顺序,我也不能分清具体岩石是哪个类,按照图片的类别来分不同岩石),类型编号为0、1、2、3、4,记为Y。代码如下:

# 数据处理
def DataDispose(X,Y,ImgList):
    for i in range(len(ImgList)):
        # 读取第一张图片,img有R、G、B(三色)三个通道
        img = Image.open(ImgPath + "\\" +ImgList[i])
        # 分离R、G、B通道
        sep = img.split()
        # R 通道
        R = np.array(sep[0])
        # 注意中心点
        row_1 = int(R.shape[0]/2) - 50
        row_2 = int(R.shape[0]/2) + 50
        con_1 = int(R.shape[1]/2) - 50
        con_2 = int(R.shape[1]/2) + 50
        R = R[row_1:row_2,con_1:con_2]
        # G 通道
        G = np.array(sep[1])
        G = G[row_1:row_2,con_1:con_2]
        # B 通道
        B = np.array(sep[2])
        B = B[row_1:row_2,con_1:con_2]
        # 获取R、G、B通道即可,并归一化
        X[i,:,:,0] = R/255
        X[i,:,:,1] = G/255
        X[i,:,:,2] = B/255
        # 构造输出数据,岩石类别编号
        S = ImgList[i]
        I = S.find('_',0,

你可能感兴趣的:(Project:Python,神经网络,python,tensorflow,深度学习,机器学习)