栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于tensorflow的校园绿植识别

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于tensorflow的校园绿植识别

基于tensorflow的校园绿植识别
  • 数据的获取
  • 数据的预处理
    • 数据的清理
    • 数据的预处理
  • 网络模型的搭建
    • 模型的编译
    • 显示一张图片
    • 模型的训练及预测
    • 预测一张图片

数据的获取

本题爬取了校园常见的8种植物作为数据集,每种植物600张图片,其中500张作为训练集,100张作为测试集。

数据的预处理 数据的清理

因为百度图片爬取下的的图片,有一部分是广告,有一部分跟真实的差别很大,所以这里做一个人工清理,删除这些图片。

数据的预处理

这里使用了一个图片批量生成器,可以直接将文件中的图片,转换大小,并生成数据,也会生成对应的标签。

train_dir = 'D:编程数据集训练集'
val_dir = 'D:编程数据集测试集'

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1./255)#进行缩放
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    train_dir,#训练集所在目录
    target_size=(256,256),#将图片转换为目标大小
    batch_size=20,#每一批的数量
    class_mode='binary' # 
)


valid_generator = test_datagen.flow_from_directory(
    val_dir,
    target_size=(256,256),
    batch_size=20,
    class_mode = 'binary'
)

网络模型的搭建

输入的大小是256*256 的3通道数据,全连接层最后输出的大小为8,因为为8分类的任务。

model = tf.keras.models.Sequential([
    # 第一层卷积层
    tf.keras.layers.Conv2D(filters=6, kernel_size=(5,5), padding='valid', activation=tf.nn.relu, input_shape=(256,256,3)),
    # 第一池化层
    tf.keras.layers.AveragePooling2D(pool_size=(2,2), strides=(2,2), padding='same'),
    # 第二卷积层
    tf.keras.layers.Conv2D(filters=16, kernel_size=(5,5), padding='valid', activation=tf.nn.relu),
    # 第二池化层
    tf.keras.layers.AveragePooling2D(pool_size=(2,2), strides=(2,2), padding='same'),
    # 扁平化层,将多维数据转换为一维数据。
    tf.keras.layers.Flatten(),
    # 全连接层
    tf.keras.layers.Dense(units=120, activation=tf.nn.relu),
    # 全连接层
    tf.keras.layers.Dense(units=84, activation=tf.nn.relu),
    # 输出层,全连接
    tf.keras.layers.Dense(units=8, activation=tf.nn.softmax)
])


model.summary()#打印网络结构

模型的编译

这里学习率为0.001

from tensorflow.keras import optimizers

model.compile(loss=tf.keras.losses.sparse_categorical_crossentropy,
             optimizer = optimizers.RMSprop(learning_rate=0.001),
             metrics=['acc'])
#损失函数交叉熵损失函数,优化方法RMSprop,评价指标acc
显示一张图片
for data_batch,labels_batch in train_generator:
    print(data_batch.shape)
    print(labels_batch)
    break


image = data_batch[0]
image.shape
plt.imshow(image)
plt.show()

模型的训练及预测
history = model.fit_generator(
    train_generator,#第一个参数必须是python生成器
    # steps_per_epoch=200,#批量数
    epochs = 10,#迭代次数
    validation_data = valid_generator,#待验证的数据集
    validation_steps = 20
)

预测一张图片
image  = np.array(train_generator[0][0])
image[0]

pred = model.predict(image[6].reshape(1,256,256,3))

xx = {0: '桂树', 1: '垂柳',2:'红继木',3:'金心吊兰',4:'蜡梅',5:'南天竹',6:'珊瑚树',7:'栀子花'}

print(xx[pred.argmax()])

plt.imshow(image[6].reshape(256,256,3))
plt.show()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965411.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号