Tensorflow---使用Tensorflow进行机场与湖泊的二分类

一、代码中的数据集可以点击以下链接进行下载

百度网盘提取码:lala

二、代码运行环境

Tensorflow-gpu==2.4.0

Python==3.7

三、数据集处理的代码如下所示

import tensorflow as tf
import os
import glob
import random

# 环境变量的配置
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

# 标签字典的构建
label_to_index = {
    'airplane': 0,
    'lake': 1
}
index_to_label = dict((v, k) for k, v in label_to_index.items())


# 图片数据的解析
def load_img(path):
    img = tf.io.read_file(path)
    img = tf.image.decode_jpeg(img, channels=3)
    img = tf.image.resize(img, [256, 256])
    img = tf.cast(img, tf.float32)
    img = img / 255
    return img


# 数据的加载
def load_dataset():
    # 文件路径的读取
    all_image_path = glob.glob(r'dataset/*/*.jpg')
    random.shuffle(all_image_path)

    # 图片标签的构建
    all_image_labels = [label_to_index.get(img.split('\\')[1]) for img in all_image_path]

    # Tensorflow数据集的构建
    img_dataset = tf.data.Dataset.from_tensor_slices(all_image_path)
    img_dataset = img_dataset.map(load_img)
    label_dataset = tf.data.Dataset.from_tensor_slices(all_image_labels)

    dataset = tf.data.Dataset.zip((img_dataset, label_dataset))

    image_count = len(all_image_path)
    test_count = int(image_count * 0.2)
    train_count = image_count - test_count
    train_dataset = dataset.skip(test_count)
    test_dataset = dataset.take(test_count)

    BATCH_SIZE = 16
    train_dataset = train_dataset.repeat().shuffle(100).batch(BATCH_SIZE)
    test_dataset = test_dataset.batch(BATCH_SIZE)

    return train_dataset, test_dataset, train_count, test_count


if __name__ == '__main__':
    train, test, train_c, test_c = load_dataset()
    print(train)
    print(test)

四、模型的构建代码如下所示

import tensorflow as tf
import os

# 环境变量的配置
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'


# 模型的构建
def make_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(64, (3, 3), input_shape=(256, 256, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.MaxPooling2D())
    model.add(tf.keras.layers.Conv2D(128, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.Conv2D(128, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.MaxPooling2D())
    model.add(tf.keras.layers.Conv2D(256, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.Conv2D(256, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.MaxPooling2D())
    model.add(tf.keras.layers.Conv2D(512, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.Conv2D(512, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.MaxPooling2D())
    model.add(tf.keras.layers.Conv2D(512, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.Conv2D(512, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.Conv2D(512, (3, 3), activation='relu', padding='same'))
    model.add(tf.keras.layers.GlobalAveragePooling2D())
    model.add(tf.keras.layers.Dense(1024, activation='relu'))
    model.add(tf.keras.layers.Dense(256, activation='relu'))
    model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

    return model


if __name__ == '__main__':
    my_model = make_model()

五、模型的训练代码如下所示

import tensorflow as tf
import os
from data_loader import load_dataset
from model import make_model

# 环境变量的配置
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

# 数据的加载
train_data, test_data, train_count, test_count = load_dataset()

# 模型的加载
model = make_model()

# 模型的相关配置
model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),
    loss=tf.keras.losses.BinaryCrossentropy(),
    metrics=['acc']
)

# 模型的训练
steps_per_epoch = train_count // 16
val_step = test_count // 16
history = model.fit(train_data, epochs=100, steps_per_epoch=steps_per_epoch, validation_data=test_data,
                    validation_steps=val_step, workers=6)

# 模型的保存
model.save(r'model_data/class_model.h5')

六、模型的预测代码如下所示

import tensorflow as tf
import os
from data_loader import load_img, index_to_label
import matplotlib.pyplot as plt

# 环境变量的配置
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

# 模型的加载
model = tf.keras.models.load_model(r'model_data/class_model.h5')

# 预测的整体代码
while True:
    path = input('请输入检测图片的路径:\n')
    try:
        img = load_img(path)
    except:
        print('图片路径输入错误!请重新输入正确文件路径!')
        continue
    else:
        plt.imshow(img.numpy())
        img = tf.expand_dims(img, axis=0)
        pre_result = model.predict(img)
        result = index_to_label.get((pre_result > 0.5).astype('int')[0][0])
        plt.title(result)
        plt.show()

七、代码的运行结果如下所示

在这里插入图片描述

八、代码的整体工程文件下载链接如下:

百度网盘提取码:lala

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水哥很水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值